私はViewModelのようなものと仮定します
public class AnotherViewModel
{
public string Name { get; set; }
}
public class MyViewModel
{
public string Name { get; set; }
public AnotherViewModel Child { get; set; }
public AnotherViewModel Child2 { get; set; }
}
ビューでは、パーシャルをレンダリングできます
<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>
部分的にやります
<%= Html.TextBox("Name", Model.Name) %>
or
<%= Html.TextBoxFor(x => x.Name) %>
ただし、問題は、モデルバインダーが適切に機能するためにname = "Child.Name"が必要な一方で、両方がname = "Name"をレンダリングすることです。または、同じ部分ビューを使用して2番目のプロパティをレンダリングするとき、name = "Child2.Name"。
部分ビューに必要なプレフィックスを自動的に認識させるにはどうすればよいですか?パラメータとして渡すことはできますが、不便です。これは、たとえば再帰的にレンダリングしたい場合はさらに悪化します。プレフィックスを付けて部分的なビューをレンダリングする方法、または呼び出し側のラムダ式を自動調整して、
<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>
正しい「子」が自動的に追加されます。生成された名前/ ID文字列のプレフィックス?
サードパーティのビューエンジンやライブラリを含む、あらゆるソリューションを受け入れることができます-私は実際にはSpark View Engine(そのマクロを使用して問題を「解決」)とMvcContribを使用していますが、そこでソリューションは見つかりませんでした。XForms、InputBuilder、MVC v2-この機能を提供するあらゆるツール/洞察は素晴らしいでしょう。
現在私はこれを自分でコーディングすることを考えていますが、それは時間の無駄のようです。この些細なことはまだ実装されていないとは信じられません。
多くの手動による解決策が存在する可能性があり、それらはすべて歓迎されます。たとえば、パーシャルをIPartialViewModel <T> {public string Prefix;に基づくように強制できます。Tモデル; }。しかし、私はむしろいくつかの既存の/承認されたソリューションを好みます。
helper.ViewData.TemplateInfo.HtmlFieldPrefix
の形式で古い接頭辞に追加する必要があります{oldprefix}.{newprefix}