Asp.Net Mvc 2 の再利用可能なパーツ?
-
21-09-2019 - |
質問
Asp.Net MVC 用の Monorail View コンポーネントに相当するものはあるのでしょうか?
私がやろうとしているのは、クラスに依存する複雑なUIをレンダリングすることです。つまり、リストビューにいるとします。このViewComponentに相当するオブジェクトにオブジェクトを渡し、そのオブジェクトをパラメータとして受け取り、複雑なUIをレンダリングしたいと考えています。ビュー内で他のことをできるようにする UI。Asp.Net MVC でこれを行う最善の方法は何でしょうか?
これは複雑な UI であるため、一度作成することを希望します。そのため、テンプレートは保守性の問題が発生するため、実際には使用したい方法ではありません。
私が見た(そしてこれから試し始めようとしている)いくつかのオプションは次のとおりです。
- 将来の Html.RenderAction
- サブコントローラー
ただし、他に何かあるのか、またはこの特定のシナリオでは一方が他方よりも優れているのかどうかを知りたいです。
解決
あなたが使用することができます。
<% Html.RenderAction<ProductController>(c => c.RenderProductResults()); %>
他のヒント
どうれるrenderPartialは?それは、法案を合わせているようだ。
<% Html.RenderPartial("MyPartialView", Model.Data); %>
DisplayTemplatesを見てだけでなく、MVC 2プレビューでEditorTemplatesを取るしてください。
それともあなたはを鋳型ヘルパーにしたいです?
MvcContrib InputBuilder似た何かをしています。
あなたは自分自身を書くことができますが。
public static string RenderInput(this HtmlHelper html, object data, string prefix)
{
foreach (var prop in data.GetType().GetProperties())
{
object val = prop.GetValue(data, new object[0]);
string name = prefix + prop.Name;
switch (prop.PropertyType.Name)
{
case "String": html.TextBox(name, val); break;
case "Guid": html.Hidden(name, val); break;
default: html.RenderInput(val, name + "."); break;
}
}
}
お知らせ再帰。もちろん、あなたは...など、コレクションのサポートを追加するために内部スイッチ(PropertyTypeは)を持つことになります...しかし、これは難しいことではありません。また、パーシャルをレンダリングするプロパティにUIHintをチェックすることがあります。あなたのコントロール下で多くの可能性と、すべての; - )