【发布时间】:2011-02-11 09:34:17
【问题描述】:
模型:
public class MyObject
{
public IList<Entry> Entries;
}
public class Entry
{
public string Name { get; set; }
}
如果我使用默认的 EditorFor(model => model.Entries),则名称/id 值为:
<input type="text" value="" name="Entries[0].Name" id="Entries_0__Name">
如果我想创建这样的 EditorFor 模板:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<List<CMS.Models.MyObject>>" %>
<div class="list">
<%
for (int i = 0; i < Model.Count; i++)
{ %>
<div class="object" id="<%: i %>">
<%: Html.EditorFor(model => Model[i]) %>
<%: Html.ValidationMessageFor(model => Model[i]) %>
</div>
<% } %>
</div>
发出的名称/id 值为:
<input type="text" value="" name="Entries.[0].Name" id="Entries__0__Name">
所以名称在属性名称和 [0] 之间有一个句点,并且 id 在索引号的左侧有一个额外的下划线。这不适用于默认模型绑定器。有没有一种方法可以与默认模型绑定器一起使用?
【问题讨论】:
-
为什么要这样做?您只是想获得包含验证消息,还是真的需要设置带有 ID 的 div 标签?
-
我这样做是为了在列表末尾有一个通用的基于 jQuery 的“添加”选项来添加另一个元素。使用该 HTML 发出列表可以更容易地使“添加”通用。考虑一种形式,其中一个部分需要 N 个引用(每个引用具有多个属性),另一部分需要 N 个关于其他内容的详细信息(每个部分具有多个属性),等等...
标签: asp.net-mvc forms defaultmodelbinder