8

全て、

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&amp;Count=1&amp;Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.String%5D&amp;Values=System.Collections.Generic.Dictionary%602%2BValueCollection%5BSystem.String%2CSystem.String%5D">EditDocumentRoles</a>

つまり、リフレクションを使用していて、完全に間違っています...

4

5 に答える 5

7

修正方法に関する提案は、MVC3 でうまくいきました。使用例:

IDictionary<string, object> routeValues = new Dictionary<string, object>();

routeValues.Add("EmployeeID", 1);

@Html.ActionLink("Employee Details", "EmployeeDetails", "Employee", new RouteValueDictionary(routeValues), null);
于 2012-03-01T23:29:32.130 に答える
3

グラハム、

menu.Attributes は IDictionary<string, string> であり、メソッドは IDictionary<string, object > を期待していますか? キーと値を、値がオブジェクト型である別のディクショナリにコピーします。

于 2010-06-28T18:12:54.037 に答える
1

RouteValueDictionarySystem.Web.Routing、実際、そうです。このクラスには、オブジェクトまたはIDictionary<string, object>. これを取るオーバーロードが 1 つあります。RouteValueDictionaryしたがって、代わりにa を渡すことができます。

編集:問題はこの部分にあると思います:

new Dictionary<string,object>()) 

最後に; null にする必要があります。なぜなら、それが行うことは、辞書のパブリック プロパティを抽出し、誤って使用することになるからです。null に変更すると問題が解決するかどうかお知らせください。

于 2010-03-13T20:53:03.317 に答える
0

MVC 2 を使用していますが、Html 属性のパラメーターとして IDictionary を取る Html.ActionLink メソッドが複数あります。それらのいずれかを使用できない何らかの理由がありますか?いくつかのデフォルトを備えた短い形式のメソッドが本当に必要な場合は、HtmlHelper でアダプター拡張メソッドを作成できます。

http://msdn.microsoft.com/en-us/library/system.web.mvc.html.linkextensions.actionlink(VS.90).aspx

おそらく私はあなたの質問を理解していません。

于 2010-06-16T20:18:10.997 に答える
0

Space Cow.. これを投稿するために使用した元の ID を紛失したため、質問に直接答えることができません。

これは ASP.NET MVC 1.0 で発生しました。

辞書を取るように見えるオーバーロードがありましたが、生成された HTML は辞書の内容ではなく、辞書自体の反映された型であり、基本的に期待どおりの動作をしていませんでした。MVC フレームワークには、定義済みのキー/値リスト (辞書など) を受け入れて、HTML href を適切に生成する方法がありませんでした。私のシナリオでは不可能だった匿名オブジェクトを作成する必要がありました

于 2010-06-18T22:17:05.193 に答える