簡體   English   中英

不同的路由配置采用相同的操作方法

[英]Different route configurations going to the same action method

我想顯示每個省或每個地區的山地自行車道的列表。 一個省包括許多地區。

我正在嘗試顯示以下2個URL:

  • www.mywebsite.com/paarl-trails (area trails)
  • www.mywebsite.com/western-cape-trails (province trails)

我具有以下路由配置(按此順序):

routes.MapRoute(
    name: "ProvinceDefault",
    url: "{seoProvinceName}-trails",
    defaults: new { controller = "Province", action = "Index" },
    namespaces: new[] { "MyProject.WebUI.Controllers" }
);

routes.MapRoute(
    name: "AreaDefault",
    url: "{seoAreaName}-trails",
    defaults: new { controller = "Area", action = "Index" },
    namespaces: new[] { "MyProject.WebUI.Controllers" }
);

這是我在視圖中創建鏈接的方式:

<a href="@Url.RouteUrl("AreaDefault", new { seoAreaName = trail.Area.SeoName })">@trail.Area.Name</a>,
<a href="@Url.RouteUrl("ProvinceDefault", new { seoProvinceName = trail.Area.Province.SeoName })">@trail.Area.Province.Name</a>

鏈接正確顯示,但是兩個都被重定向到省控制員的“索引”方法。 我更改了2條路由配置,但是它們都轉到了區域控制器的Index方法。

我希望www.mywebsite.com/paarl-trails轉到區域控制器的索引方法,並且我希望www.mywebsite.com/western-cape-trails轉到省控制器的Index方法。

我該如何正確處理?

我同意前面的答案,因為ASP.NET MVC路由引擎無法區分這兩種路由。 您可以做的是在SEOProvinceName之前添加區域名稱。 這樣,路線將如下所示:

  • www.mywebsite.com/paarl-area-trails(區域小徑)
  • www.mywebsite.com/paarl-area/western-cape-province-trails(該地區的省道)

為了使此工作正常,路由應如下所示:

routes.MapRoute(
    name: "ProvinceDefault",
    url: "{seoAreaName}/{seoProvinceName}-province-trails",
    defaults: new { controller = "Province", action = "Index" },
    namespaces: new[] { "MyProject.WebUI.Controllers" }
);

routes.MapRoute(
    name: "AreaDefault",
    url: "{seoAreaName}-area-trails",
    defaults: new { controller = "Area", action = "Index" },
    namespaces: new[] { "MyProject.WebUI.Controllers" }
);

希望對您有所幫助。

MVC路由無法正常工作。 當從服務器請求URL時,路由引擎將按照您定義它們的順序選擇與URL匹配的第一條路由。 路由系統無法區分您所定義的兩條路由,因為它們看起來相同:后面跟-trails

您必須更改URL及其路由,以使路由引擎正確處理它們,如下所示:

網址:

  • www.mywebsite.com/paarl-area-trails(區域小徑)
  • www.mywebsite.com/western-cape-province-trails(省徑)

路線:

routes.MapRoute(
    name: "ProvinceDefault",
    url: "{seoProvinceName}-province-trails",
    defaults: new { controller = "Province", action = "Index" },
    namespaces: new[] { "MyProject.WebUI.Controllers" }
);

routes.MapRoute(
    name: "AreaDefault",
    url: "{seoAreaName}-area-trails",
    defaults: new { controller = "Area", action = "Index" },
    namespaces: new[] { "MyProject.WebUI.Controllers" }
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM