我正在尝试解决以下情况的问题:
- 用户加载页面并加载 EditorTemplate ViewModel。
- 用户在页面上打开一个对话框。
- 此对话框在其中加载相同的 EditorTemplate ViewModel。
- 由于 DOM 树中存在每个控件的多个实例,控件 ID 现在是非唯一的
我的解决方案是向我的控制器指示我希望在对话框中构建 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。
两部分问题:
- 这是达到我想要的效果的正确道路吗?
- 如何通知 MVC ID 已被修改,以便我恢复 JSON 到模型的转换?