【问题标题】:How to get the different URL for action methods in single controller without controller name in URL?如何在没有控制器名称的 URL 中获取单个控制器中操作方法的不同 URL?
【发布时间】:2014-06-03 03:57:38
【问题描述】:

我正在开发一个简单的 MVC 网站。在我的项目中,只有一个控制器(Home)和 2 个操作方法(IndexInner 页面)。 Home 操作返回主页的视图,Inner pages 操作返回内页的内容(内页使用单个模板,因此对所有内页使用单个视图)。

现在我想要的是,如果我运行项目,我会得到如下菜单:

http://localhost:3000/Home/
http://localhost:3000/Home/Info/AboutUs
http://localhost:3000/Home/Info/Contact

但我需要的路径不是上面的路径:

http://localhost:3000/Home/
http://localhost:3000/AboutUs
http://localhost:3000/Contact

无需添加新的控制器,url需要调用其对应的action方法。

我的路由文件是

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

你能帮我实现这个吗?

【问题讨论】:

  • 确定HomeController 上的操作不是IndexInfo

标签: asp.net-mvc asp.net-mvc-routing


【解决方案1】:

您需要在路由表中添加自定义路由。但请确保您还保留默认路线。例如,我在下面创建了一个名为“HomeRoute”的自定义路由,同时保留了默认路由...

routes.MapRoute(
            name: "HomeRoute",
            url: "{action}",
            defaults: new { controller = "Home", action = "Index" }
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

但是,请注意,您需要在 home 控制器中定义操作方法,因为默认控制器设置为“Home”,如果它们在不同的控制器中定义,则更改默认控制器

换句话说,如果你的 Home 控制器定义如下......

public class HomeController : Controller
{
    public ActionResult Index(){...}
    public ActionResult About(){...}
}

然后您可以使用以下路线导航到 About 操作...

网站名称/关于

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多