ASP.NET MVCには、引数として匿名型を受け入れ、入力を生成するヘルパーがたくさんあります。
例えば:
@Html.Action("Action", "Controler", new {routeVal1 = 1, routeVal2 = 2})
私の質問は、匿名型を受け入れる独自の拡張機能を実装する方法です。オブジェクトとして参照してリフレクションを使用する必要がありますか、それともより洗練されたソリューションがありますか?
ASP.NET MVCには、引数として匿名型を受け入れ、入力を生成するヘルパーがたくさんあります。
例えば:
@Html.Action("Action", "Controler", new {routeVal1 = 1, routeVal2 = 2})
私の質問は、匿名型を受け入れる独自の拡張機能を実装する方法です。オブジェクトとして参照してリフレクションを使用する必要がありますか、それともより洗練されたソリューションがありますか?
dynamic
の代わりに使用できますobject
。
Visual C#2010では、動的な新しいタイプが導入されています。型は静的型ですが、動的型のオブジェクトは静的型チェックをバイパスします。ほとんどの場合、それはタイプオブジェクトを持っているように機能します。コンパイル時に、動的として入力された要素は、すべての操作をサポートすると想定されます。したがって、オブジェクトがCOM APIから、IronPythonなどの動的言語から、HTMLドキュメントオブジェクトモデル(DOM)から、リフレクションから、またはプログラムの他の場所から値を取得するかどうかを気にする必要はありません。ただし、コードが有効でない場合は、実行時にエラーがキャッチされます。
まず最初に、オブジェクトの拡張機能を正しく設定していると想定して
@HTML
います。必要なのは、次のメソッドを作成することです。
RouteValueDictionaryクラス
したがって、public static mvchtmlstring Foo(string Action、string Controller、RouteValueDictionary values)になります
次に、関数呼び出しがあります
TagBuilder tb = new TagBuilder("D");
tb.Attributes.Add();
だから全部が
public static mvchtmlstring Foo(string taglabel, string url, RouteValueDictionary values)
{
TagBuilder tb = new TagBuilder("a");
tb.Attrubutes.add("href",url);
tb.setInnerText(taglabel);
tb.MergeAttributes(values);
return new MvcHtmlString(tb.toString());
}
その後、呼び出しは
@Html.Foo("Bar","Http://www.stackoverflow.com",new {Id="d", class="dd"})
ところで、RouteValueDictionaryはIDictionaryから継承するため、クラスにもその署名を付けることができます。