如何在ASP.NET MVC 4和MVC 5中设置默认控制器


Answers:


165

最好的方法是更改​​路线。默认路由(在App_Start中定义)设置/Home/Index

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

作为默认登录页面。您可以将其更改为您希望的任何路线。

routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters*
        new { controller = "Sales", action = "ProjectionReport", 
        id = UrlParameter.Optional }
);

13
在MVC 4的默认路由设置在App_Start / RouteConfig.cs
埃里克Labashosky

非常真实 我目前正致力于这两个项目,却忽略了这些内容;)
Dave Alperovich

1
Dave是正确的,但我想补充一点,在MVC 4中,路由不再在Global.asax中完成,而是在App_Start下的RouteConfig.cs中完成
好撒玛利亚人

2
当默认路由中引用的控制器位于另一个区域(即不是根区域)时,如何使它工作?
superjos

您应该可以将默认路线转到"AreaName/{controller}/{action}/{id}"
Dave Alperovich

30

App_Start文件夹的RouteConfig.cs中设置以下代码

public static void RegisterRoutes(RouteCollection routes)
{
 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 routes.MapRoute(
 name: "Default",
 url: "{controller}/{action}/{id}",
 defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional });
}

如果仍然无法正常工作,请执行以下步骤

第二种方法: 您只需按照以下步骤操作,

1)右键单击您的项目

2)选择属性

3)选择Web选项,然后选择特定页面(控制器/视图),然后设置登录页面

在这里,“帐户”是我的控制者,“登录”是我的操作方法(保存在“帐户控制器”中)

请看附件在此处输入图片说明截图。


15
您的“第二种方式”是关于调试Web项目时发生的情况。它与“默认控制器”无关,即,导航到网站的目标页面时显示什么页面。
Martin Liversage 2014年

25

我没有看到这个问题的答案:

应用程序启动时应如何设置默认区域

因此,这是设置默认区域的方法:

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

1
很好的问题,为什么不将它创建为一个?
stuartdotnet

什么是“区域”?如果我定义一个View,是否加载了引用的布局,然后使用我的View数据进行了单独的HTTP请求?(即单独的Ajax操作)还是布局渲染并包裹在我的视图周围?
Gus Crawford 2014年

2
@GusCrawford什么是“区域”?从msdn.microsoft.com/zh-cn/library/ee671793(VS.100).aspx:为了容纳大型项目,ASP.NET MVC允许您将Web应用程序划分为多个较小的单元,这些单元称为区域。区域提供了一种将大型MVC Web应用程序分为较小的功能组的方法。区域实际上是应用程序内部的MVC结构。一个应用程序可能包含几个MVC结构(区域)。
Amna Ali 2014年

至于另一个问题,我认为这与这个答案无关,甚至与原始问题也不相关。可能是,您应该将其发布在其他地方。
Amna Ali 2014年

病态在新线程中分别询问谢谢您的观点。
Gus Crawford 2014年

2

如果您只有一个控制器,并且想要访问根目录上的每个操作,则可以跳过这样的控制器名称

routes.MapRoute(
        "Default", 
        "{action}/{id}", 
        new { controller = "Home", action = "Index", 
        id = UrlParameter.Optional }
);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.