Asp.net mvc asp mvc项目中的操作链接和区域问题
我有一个区域Asp.net mvc asp mvc项目中的操作链接和区域问题,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-routing,asp.net-mvc-areas,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc Routing,Asp.net Mvc Areas,我有一个区域Area1和控制器Home,它是Index方法。 我还用controllerHome创建了另一个区域Area2,它是Index方法。 在Area1中,我有一个操作链接,应该在Area2中打开Index页面 @Html.ActionLink("Link to another area index", "Index", "Home", new { area = "Area2" }, null) 但是当我点击这个链接时,它首先进入区域1/Home/Index 为什么会发生这种情况。这必须
Area1
和控制器Home
,它是Index
方法。我还用controller
Home
创建了另一个区域Area2
,它是Index
方法。在
Area1
中,我有一个操作链接,应该在Area2
中打开Index
页面@Html.ActionLink("Link to another area index", "Index", "Home", new { area = "Area2" }, null)
但是当我点击这个链接时,它首先进入区域1/Home/Index
为什么会发生这种情况。这必须是这样的还是可以直接转到
区域2/主页/索引
?
这给我带来了问题,因为在Area1/Home/Index中,我需要一些参数,而当这种情况发生时,该值为null或错误,这给我带来了问题。我一定是做错了什么。 更新 区域1路由
public override void RegisterArea(AreaRegistrationContext context)
{
context.Routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });
context.MapRoute(
"Area1_home",
"{country}/{city}",
new { controller = "Home", action = "Index", country = UrlParameter.Optional, city = UrlParameter.Optional }
);
context.MapRoute(
"Area1_default",
"Area1/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
区域2路由:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Area2_default",
"Area2/{controller}/{action}/{id}",
new { controller="Home", action = "Index", id = UrlParameter.Optional }
);
}
尝试:
仍然首先进入区域1/主页/索引:(嗯,这很奇怪,我发现更多的链接说的几乎是一样的:在这里也一样。如果你的区域设置正确,没有特殊路由配置,我不知道为什么它不起作用。你试过用大写字母
a
拼写的Area
是吗?是的,我试过“a”。我用rou更新了问题ting,因为可能是路由给我带来了麻烦。当我创建项目时,我从global.asax中删除了所有路由。我现在返回默认路由,它工作了。我不明白为什么这样做…routes.MapRoute(“default”,//路由名称“{controller}/{action}/{id}”,//带有参数new{area=“Area1”,controller=“Home”,action=“Index”,id=UrlParameter.Optional}//参数默认值);至少你的操作链接可以正常工作,并且现在可以专注于路由。路由可能会变得非常混乱。请记住,始终尝试自上而下匹配路由。因此,无论先添加哪个路由配置,都将首先尝试匹配的配置。如果MVC找到匹配,它将不会继续搜索并返回该路由配置。添加路由时,始终将其添加为最重要的匹配首个,最不重要的匹配最后一个。
Html.ActionLink("Link to another area index", "Index", "Home", new { Area = "Area2" }, new{});