全部,通過DictionaryValues字典到ActionLink
掌握ASP.NET MVC。到目前爲止,這麼好,但這是一個堅果。
我有一個包含屬性的超鏈接的字典的圖模型,使用這樣的:
菜單=模型變量
Html.ActionLink(Html.Encode(menu.Name), Html.Encode(menu.Action), Html.Encode(menu.Controller), menu.Attributes, null)
的問題是「menu.Attributes」的位置預計形式的對象:
new { Name = "Fred", Age=24 }
從我可以告訴,這個匿名對象實際上是通過反射轉換成字典反正但你不能傳遞一個dictio中首先是它!
爲鏈接生成的Html只顯示字典類型。
究竟我該如何解決這個問題?整點是,它一般和控制器可以先前設定的menu.Attributes ....
基於下面我後嘗試了以下內容:
Html.ActionLink(Html.Encode(menu.Name), Html.Encode(menu.Action), Html.Encode(menu.Controller), new RouteValueDictionary(menu.Attributes), new Dictionary<string,object>())
但是這仍然無法正常工作(我猜代碼在內部調用了接受對象的泛型方法?)。上述(和我原來的傳入一個字典到4 paramater的解決方案產生HTML與此類似:
<a href="/EditRole?Comparer=System.Collections.Generic.GenericEqualityComparer%601%5BSystem.String%5D&Count=1&Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.String%5D&Values=System.Collections.Generic.Dictionary%602%2BValueCollection%5BSystem.String%2CSystem.String%5D">EditDocumentRoles</a>
即它使用反射和完全錯誤的工作的事情了......
嗨,謝謝,但這也行不通。 用一些更多信息更新了原件 – Graham 2010-03-13 22:17:21
什麼是menu.Attributes?它拉動字典的屬性並將其用作路由參數,這就是爲什麼你會得到這個錯誤。 – 2010-03-15 00:33:20
menu.Attributes本身是一個IDictionary。我明白,它使用反射來訪問字典的屬性並使其錯誤。 我不明白爲什麼我上面提出的修改,即。正如你所建議的那樣,從字典中創建一個路由值仍然會導致反射位不正確,因爲我將它傳遞給了一個Routevaluedictionary –
Graham
2010-03-15 11:29:49