次のような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 ビュー エンジン (マクロを使用して問題を「解決」) と MvcContrib を使用していますが、解決策が見つかりませんでした。XForms、InputBuilder、MVC v2 - この機能を提供するツール/洞察はどれも優れています。
現在、これを自分でコーディングすることを考えていますが、時間の無駄のように思えます。この些細なことがまだ実装されていないとは信じられません。
多くの手動ソリューションが存在する可能性があり、それらはすべて歓迎されます。たとえば、パーシャルを強制的に IPartialViewModel<T> { public string Prefix; に基づくようにすることができます。T モデル; }。しかし、私は既存の/承認されたソリューションを好むでしょう。
更新:ここには答えのない同様の質問があります。