次のシナリオで問題を解決しようとしています。
- ユーザーがページを読み込み、EditorTemplate ViewModel が読み込まれます。
- ユーザーがページ上でダイアログを開きます。
- このダイアログは、その中に同じ EditorTemplate ViewModel をロードします。
- DOM ツリーに存在する各コントロールの複数のインスタンスにより、コントロール ID が一意ではなくなりました。
これに対する私の解決策は、Dialog 内に ViewModel を構築したいことをコントローラーに示すことです。これは、生成されたコントロール ID に追加する必要がある「プレフィックス」文字列を示すことによって行います。この提案は、この StackOverflow の投稿から取り入れました。
そのため、ViewModel で次のように宣言されたコントロールがあります。
<%--This will append our model's prefix onto all generated IDs to ensure uniqueness.--%>
<% using (Html.BeginHtmlFieldPrefixScope(Model.Prefix)) { %>
<div class="detailsRow required">
<%= Html.LabelFor(model => model.Name, Model.NameLabel) %>
<%= Html.EditorFor(model => model.Name) %>
</div>
<% } %>
そして私のモデルでは:
public NewOrderDetailsModel(string prefix) : this()
{
Prefix = prefix;
}
これは正常に動作します。コントロールの ID を変更する効果があります。「名前」ではなく「prefix_Name」としてレンダリングされます。
ただし、データをサーバーに投稿すると、変更によって MVC の変換マジックが壊れます。
ご覧のとおり、ID が変更されたすべてのプロパティが null として返されます。
2 部構成の質問:
- これは、目的の効果を達成するために下る正しい道ですか?
- JSON からモデルへの変換が元に戻るように ID が変更されたことを MVC に通知するにはどうすればよいですか?