2012-07-27 89 views
0

我已經找了一段時間,解決方案看起來像他們應該工作,似乎我做錯了。MVC路由問題,區域和HTML動作鏈接

我創建了一個區域用於管理CMS方所謂的「管理」,所以如果你去:

/管理/ Vinyard

它會給你vinyards列表使用帶有內置VinyardController管理CRUD腳手架。

在「前端」我有一個瀏覽控制器和另一個VinyardController查看vinyard的細節。

所以有人去

/瀏覽/ Vinyard

這讓他們Vinyards的名單,他們點擊一個(這裏的問題),我想它去

/Vinyard/NameOfVinyard

,我有這條路線是:

 routes.MapRoute(
      "Vinyard", 
      "Vinyard/{Name}", 
      new { controller = "VinyardController", action = "Details", area="root"} 
      ); 

哪個在默認路線上方。詳細信息是顯示Vinyard詳細信息的方法。

我使用的是HTML.actionlink:

@Html.ActionLink(item.Name, "Details", "vinyard" ,new { name = item.VinyardId, area="root" }) 

出於某種原因,所返回的標籤是:?/瀏覽/詳細信息長度= 7

最重要的是,當我嘗試瀏覽到/ vinyard/1它給了我一個404.

感謝您的幫助!

更新:如果我瀏覽到/ vinyard/details/1,它可以正常工作,但我希望它避開/ details/part。

回答

0

固定它。使用Shyju修改的操作鏈接,但我也刪除了區域屬性,並且必須修復地圖路由才能正常工作。

我global.ascx現在看起來是這樣的:

 routes.MapRoute(
      "Vinyard", 
      "Vinyard/{id}", 
      new { controller = "Vinyard", action = "Details", id=UrlParameter.Optional}, 
      new[] { "MyNameSpace.Controllers" } 
      ); 

是兩個問題:我是「Vinyard」而不是「VinyardController」需要的控制器名稱,我需要在這裏和在加名字空間我因爲我在兩個地區都使用了相同的班名。

1

使用此overload

public static MvcHtmlString ActionLink(
    this HtmlHelper htmlHelper, 
    string linkText, 
    string actionName, 
    string controllerName, 
    Object routeValues, 
    Object htmlAttributes 
) 

代碼,以便改變

@Html.ActionLink(item.Name, "Details", "vinyard" , 
       new { name = item.VinyardId, area="root" },null) 
+0

這給了我只是/瀏覽/我的所有條目。出於某種原因,它不區分除鏈接名稱之外的其他項目。 – Snowburnt 2012-07-27 17:08:28