我有一个名为广告的区域。这个区域作为两条路线规则。但遗憾的是,一次只有一条路线规则有效。通常第一条规则,另一条规则不起作用。但是,如果我采用交互规则,那么首先出现的规则就会起作用。
我会粘贴调用规则的规则和html链接。
AdvertAreaRegistration.cs的代码片段
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Advert_second",
"Advert/{controller}/{action}",
new { controller = "AdvertAdmin", action = "Index" },
namespaces: new string[] { "LiveChatPrototype.Mvc.Areas.Advert.Controllers" }
);
context.MapRoute(
name: "Advert_default",
url: "Advert/{id}/{advertid}",
defaults: new { controller = "Advertisement", action = "Index", id =UrlParameter.Optional, advertid = UrlParameter.Optional },
namespaces: new string[] { "LiveChatPrototype.Mvc.Areas.Advert.Controllers" }
);
}
我用来调用规则的html链接
这是第一条规则。
这是第二条规则。
如果规则首先出现,那么任何一个链接都会起作用。
请问如何让两条规则同时运作。
答案 0 :(得分:0)
目前两个路段是相同的
<强>&#34;广告/ {控制器} / {行动}&#34; 强>
<强>&#34;广告/ {ID} / {advertid}&#34; 强>
两者都有两个动态段,因此asp.net mvc无法区分两者并匹配第一个。
但似乎&#34;广告/ {id} / {advertid}&#34; ID 和广告意图是整数。然后,您可以在路由中添加正则表达式约束以区分它们。 像
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
name: "Advert_default",
url: "Advert/{id}/{advertid}",
defaults: new { controller = "Advertisement", action = "Index" },
constraints: new { id = @"\d+", advertid = @"\d+" }
namespaces: new string[] { "LiveChatPrototype.Mvc.Areas.Advert.Controllers" }
);
context.MapRoute(
"Advert_second",
"Advert/{controller}/{action}",
new { controller = "AdvertAdmin", action = "Index" },
namespaces: new string[] { "LiveChatPrototype.Mvc.Areas.Advert.Controllers" }
);
}
希望这有帮助