【问题标题】:How to set Default Controller in asp.net MVC 4 & MVC 5如何在 asp.net MVC 4 和 MVC 5 中设置默认控制器
【发布时间】:2013-01-03 19:01:30
【问题描述】:

如何为我的 ASP.NET MVC 4 项目设置默认控制器而不使其 HomeController

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

【问题讨论】:

  • 作为根页面将从“/”更改为“/home”吗?此“/home”必须在客户的浏览器中可见。

标签: c# asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-5


【解决方案1】:

最好的方法是改变你的路线。默认路由(在您的 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 }
);

【讨论】:

  • 在 MVC 4 中,默认路由在 App_Start/RouteConfig.cs 中设置
  • 非常正确。我目前正在从事这两个项目的工作,但忽略了这些事情;)
  • Dave 是对的,但我想补充一点,在 MVC 4 中,路由不再在 Global.asax 中完成,而是在 RouteConfig.cs 下完成>App_Start.
  • 当默认路由中引用的控制器位于另一个区域(即不是根区域)时,如何使其工作?
  • 你应该可以让默认路由转到"AreaName/{controller}/{action}/{id}"
【解决方案2】:

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 选项,然后选择特定页面(控制器/视图),然后设置您的登录页面

这里,Account 是我的控制器,Login 是我的操作方法(保存在 Account Controller 中)

请看附件截图。

【讨论】:

  • 您的“第二种方式”是关于调试 Web 项目时发生的情况。它与“默认控制器”无关,即当您导航到网站的登录页面时显示的页面。
【解决方案3】:

我没有看到这个问题得到回答:

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

那么,您可以通过以下方式设置默认区域:

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" });

【讨论】:

  • 很好的问题,你为什么不将它创建为一个?
  • 什么是“区域”?如果我定义一个视图,是否加载了引用的布局,然后是一个带有我的视图数据的单独 HTTP 请求? (即单独的 Ajax 操作)还是布局渲染并包裹在我的视图周围?
  • @GusCrawford 什么是“区域”?来自msdn.microsoft.com/en-us/library/ee671793(VS.100).aspx:为了适应大型项目,ASP.NET MVC 允许您将 Web 应用程序划分为称为区域的较小单元。区域提供了一种将大型 MVC Web 应用程序分成更小的功能组的方法。区域实际上是应用程序内部的 MVC 结构。一个应用程序可以包含多个 MVC 结构(区域)。
  • 至于另一个问题,我认为它与此答案无关,甚至与原始问题似乎也不相关。可能是,你应该把它贴在别的地方。
  • 我会在新线程中单独询问回复感谢您的观点。
【解决方案4】:

如果你只有一个控制器,并且你想访问 root 上的每个操作,你可以像这样跳过控制器名称

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

【讨论】:

    猜你喜欢
    • 2016-08-23
    • 2017-09-30
    • 2015-12-05
    • 2021-12-29
    • 2011-09-22
    • 2013-05-23
    • 1970-01-01
    • 2019-01-02
    相关资源
    最近更新 更多