2013-11-21 39 views
3

通過錯誤,我拿錯了構造在ActionLink神祕長度參數在MVC行動

@Html.ActionLink("Show Customer", "Load", "Customer", new {Model.Id }); 

的錯誤是,最後一個參數是htmlAttributes型的,而不是routeValues(如預期)。所以,正確的構造將是:

@Html.ActionLink("Show Customer", "Load", "Customer", new {Model.Id }, null); 

所以我沒有必要來解決這個問題......我只是想知道,當我使用了錯誤的構造,我routeValue必須被解釋爲htmlAttribute

我只是感到驚訝,結果在length-參數。生成的代碼是:

/客戶/負載長度= 7

只是出於好奇:來自哪裏的length=7

+0

看來我有幾個鏈接錯了然後...我經常看到這個參數... – Romias

回答

5

這是ActionLink的,過載被擊中:

public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, object routeValues, object htmlAttributes); 

所以你唯一的路線值是字符串,控制器名稱,「客戶」,它具有公共財產長,8個符號。並且routeValues選擇反射所有傳遞給它的對象的公共屬性。

值得一提的是,您的鏈接將收到html屬性Id ='whatever_id_model_holds',因爲第4個參數映射到htmlAttributes。

+0

你似乎是正確的,這真的令人驚訝,因爲「客戶」有八個字符....但。在原來的代碼中,它是「合作伙伴」而不是「客戶」。我改變了代碼,使其更具匿名性和可讀性。所以。編碼知識的「+1」,數學的「-1」.... :) –

+1

@OleAlbers,你是對的。檢查我的舊代碼,而沒有手動進行真正的計算。固定) – Dmytro

2

取自https://stackoverflow.com/a/4360565/7720

的ActionLink的覆蓋使用的是匹配的(字符串LINKTEXT,串actionName,對象routeValues,對象htmlAttributes)覆蓋。所以你的「Customer」值被傳遞給routeValues參數。此函數相對於此參數的行爲是將所有公共屬性添加到它並將其添加到用於生成鏈接的路由值列表中。由於一個String只有一個公共屬性(Length),所以最終的結果是「length = 7」。