2015-10-14 60 views
1

我發現一個解決方法,有一些問題,但我不明白爲什麼會發生,也可能是一個比我想出的更好的解決方法。佈局actionlink路由不正確

在我_layout這是在共享文件夾,我有@Html.ActionLink("Firewall", "Create", "Firewalls", new { @class = "button roundedCorners" })這是在HTML渲染爲<a class="button roundedCorners" href="/Home/Create?Length=9">Firewall</a>

如果我添加,null到最後,鏈接工作,但類樣式被忽略。

下面也有效,但又忽略了造型@Html.RouteLink("Firewall", "Default", new { @class = "button roundedCorners", controller = "Firewalls", action = "Create"})

這是錯誤的控制器,爲什麼當我明確通過Firewalls時將路由設置爲Home

回答

4

它需要

@Html.ActionLink("Firewall", "Create", "Firewalls", null, new { @class = "button roundedCorners" }) 

第四個參數是路由值和第五個參數是HTML屬性

+0

輝煌,謝謝。將解釋爲什麼刪除css類允許正確的功能。 – PurpleSmurph

+1

他沒有刪除該類,因爲您沒有傳入任何路由值,所以他將'RouteValues'參數設置爲null。您將錯誤的值傳遞給錯誤的參數 - 將html屬性傳遞給路由值參數。 – Luke

+0

這不是我的意思 - 在我的例子中,我把這個類作爲第四個參數,當刪除它時,只留下它作爲Name,Action,Controller,使用了所需的路線。 – PurpleSmurph

3

有Html.ActionLink的多個重載。在你的例子中,你試圖將HtmlAttributes值傳入RouteValues參數。

以下是爲您的特定情況下,一些有效的重載:

// Link Text and Action 
@Html.ActionLink("Firewall", "Create") 

// Link Text, Action and Controller name 
@Html.ActionLink("Firewall", "Create", "Firewalls") 

// Link Text, Action, Controller name, Route Values and Html Attributes 
@Html.ActionLink("Firewall", "Create", "Firewalls", new { forUser = "PurpleSmurph" }, new { @class = "button roundedCorners" }) 

在我的路線值傳遞的最後一個例子,不應用程序中存在這樣的路由引擎將增加額外的路由值爲生成的URL的查詢字符串:

<a class="button roundedCorners" href="/Home/Create?forUser=PurpleSmurph">Firewall</a> 

但是當你不希望任何額外的查詢字符串值,在斯蒂芬·馬克的例子,它被設置爲null,以機生產線ce:

<a class="button roundedCorners" href="/Home/Create">Firewall</a> 

我希望這有助於!您可以在documentation page上看到不同的過載情況。

+1

感謝您的額外信息! – PurpleSmurph