我正在尝试将我的MVC应用程序的默认URL设置为我的应用程序区域内的视图。该区域称为“普通”,控制器“主页”和视图“索引”。
我已尝试将web.config的表单部分中的defaultUrl设置为“〜/ Common / Home / Index ”,但没有成功。
我还尝试在global.asax中映射新路由,因此:
routes.MapRoute(
"Area",
"{area}/{controller}/{action}/{id}",
new { area = "Common", controller = "Home", action = "Index", id = "" }
);
再次,无济于事。
答案 0 :(得分:13)
您列出的路线只有在明确输入网址时才有效:
yoursite.com/{area}/{controller}/{action}/{id}
该路线说的是:
如果我的请求具有有效{area}
,该区域中的有效{controller}
以及该控制器中的有效{action}
,请将其路由到那里。
如果他们只是访问您的网站yoursite.com
:
routes.MapRoute(
"Area",
"",
new { area = "Common", controller = "Home", action = "Index" }
);
这说明如果他们没有向http://yoursite.com
添加任何内容,那么就将其路由到以下操作:Common/Home/Index
另外,将它放在路线表的顶部。
确保您也让MVC知道您在应用程序中注册的区域:
将以下内容放入Application_Start
文件的Global.asax.cs
方法中:
AreaRegistration.RegisterAllAreas();
答案 1 :(得分:7)
你要做的是:
从global.asax.cs中删除默认路由
//// default route map will be create under area
//routes.MapRoute(
// name: "Default",
// url: "{controller}/{action}/{id}",
// defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
//);
在Common Common
添加以下路线映射:
context.MapRoute(
"Default",
"",
new { controller = "Home", action = "Index", id = "" }
);
答案 2 :(得分:0)
你所做的似乎是正确的。如果我不得不猜测,由于您运行网站的方式,我会说这种情况正在发生。在Visual Studio中,如果在按F5时选择了特定视图,则该视图将成为起始URL - 尝试选择项目然后点击F5?
答案 3 :(得分:0)
在Global.asax中 删除.MapRoute
并使其看起来像
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
}
然后在该区域的yourareaAreaRegistration.cs下(如果您通过VS添加区域,则在那里)
public override void RegisterArea(AreaRegistrationContext context)
{
//This is the key one
context.MapRoute("Root", "", new { controller = "Home", action = "Login" });
//Add more MapRoutes if needed
}