我有两个不同的区域,我在其中一个区域中有一条特定于该区域的路线,但我需要使用来自其他区域的Html.RouteLink生成到该路线的链接(这是你如何进入新区域)但它不起作用......似乎不可能将RouteLink用于不同区域的路线。
最好的方法是什么?我应该在另一个区域中定义一条新路线并以不同方式命名吗?
更新(代码):
在主要区域的母版页中(我尝试了多种方式,所有方法都产生了相同的结果):
<a href="<%= Url.Action("Index", "Home", new { area = "CustomerSite", route = "CustomerSite_preview", domain = (string)ViewData["DomainName"] }, null) %>">
在CustomerSite区域注册为注册的第一条路线:
context.MapRouteLowercase(
"CustomerSite_preview",
"preview/{domain}/{controller}/{action}/{id}",
new { area = "CustomerSite", controller = "Home", action = "Index", id = "" },
new { isCustomerSite = new CustomerSiteRouteConstraint() },
new string[] { "GrayHills.CarLotHosting.Web.Areas.CustomerSite.Controllers" }
);
答案 0 :(得分:1)
在您的路线对象中,您只需要一个名为area的属性,其名称为该区域。
Html.RouteLink("My Link Text",
new { area = "MyArea", controller = "MyController" ... },
null);
答案 1 :(得分:0)
您需要更改路线定义 - 有关详细信息,请参阅答案ASP.NET MVC Url.Action routing error。
实质上,您的路由应如下所示,因为您明确提供了控制器名称和操作:
context.MapRouteLowercase(
"CustomerSite_preview",
"preview/{domain}/home/index/",
new { area = "CustomerSite"
, controller = "Home"
, action = "Index"},
new { isCustomerSite = new CustomerSiteRouteConstraint() },
new string[] {
"GrayHills.CarLotHosting.Web.Areas.CustomerSite.Controllers"}
Url.Action看起来像
<a href="<%= Url.Action("Index"
, new {domain = (string)ViewData["DomainName"] }
, null) %>">
会产生类似http://localhost:56291/preview/somedomainname/home/index