C# 在MVC3中为控件ID添加前缀以确保唯一性。回发到服务器时,我丢失了所有数据
我正在尝试解决以下场景中的问题:C# 在MVC3中为控件ID添加前缀以确保唯一性。回发到服务器时,我丢失了所有数据,c#,asp.net-mvc-3,model,C#,Asp.net Mvc 3,Model,我正在尝试解决以下场景中的问题: 用户加载页面并加载EditorTemplate ViewModel 用户在页面上打开一个对话框 此对话框在其中加载相同的EditorTemplate ViewModel 由于DOM树中存在每个控件的多个实例,因此控件ID现在是非唯一的 我的解决方案是向控制器指示我希望在对话框中构建ViewModel。我通过指示应该附加到生成的控件ID上的“前缀”字符串来实现。我采纳了他的建议 因此,我在ViewModel中声明了一个控件: <%--This will
- 用户加载页面并加载EditorTemplate ViewModel
- 用户在页面上打开一个对话框
- 此对话框在其中加载相同的EditorTemplate ViewModel
- 由于DOM树中存在每个控件的多个实例,因此控件ID现在是非唯一的
<%--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>
<% } %>
这样行。它具有修改控件ID的效果。它呈现为“prefix_Name”而不是“Name”
但是,当我将数据发布到服务器时,我的更改打破了MVC的转换魔法:
如您所见,所有修改了ID的属性返回为null
问题分两部分:
- 这是实现我期望效果的正确途径吗
- 我怎样才能通知MVC ID已经被修改,这样我就可以恢复JSON到模型的转换
public ActionResult SomeAction([Bind(Prefix = "SomePrefix")] ViewModel model){...}
有关这方面的更多信息,请参阅本文:
我假设这是一个常量,是吗?所以我需要分离控制器的SomeAction,这取决于我希望传递给控制器的ViewModel的哪个前缀?是的,它将是常量,但这实际上应该是一种边缘情况。如果您将要遇到很多情况,请考虑将视图模型更改为具有一个需要的所有信息的复合对象。
public ActionResult SomeAction([Bind(Prefix = "SomePrefix")] ViewModel model){...}