全て、
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 }
私が知る限り、この匿名オブジェクトは実際にはリフレクションを介して辞書に変換されますが、そもそも辞書を渡すことはできません!!!
リンク用に生成された 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 番目のパラメーターに渡すという私の元のソリューションでは、次のような 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>
つまり、リフレクションを使用していて、完全に間違っています...