区域路线问题

时间:2014-07-19 13:36:15

标签: asp.net-mvc-4 asp.net-mvc-routing

我有一个名为广告的区域。这个区域作为两条路线规则。但遗憾的是,一次只有一条路线规则有效。通常第一条规则,另一条规则不起作用。但是,如果我采用交互规则,那么首先出现的规则就会起作用。

我会粘贴调用规则的规则和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链接

这是第一条规则。

这是第二条规则。

如果规则首先出现,那么任何一个链接都会起作用。

请问如何让两条规则同时运作。

1 个答案:

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

希望这有帮助