模特:
public class MyObject
{
public IList<Entry> Entries;
}
public class Entry
{
public string Name { get; set; }
}
如果我使用默认的EditorFor(model =&gt; 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在索引号的左侧有一个额外的下划线。这不适用于默认的模型绑定器。有没有办法可以使用默认模型绑定器?
答案 0 :(得分:3)
我认为您可以使用模板完成大部分操作,而无需显式迭代列表,这似乎会导致模型绑定器出现问题。
尝试制作这些共享编辑器模板:
MyObject编辑器模板
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CMS.Models.MyObject>" %>
<div class="list">
<%: Html.EditorFor(m => m.Entries) %>
</div>
条目编辑器模板
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CMS.Models.Entry>" %>
<div class="object" id="<%: ??? %>">
<%: Html.EditorFor(m => m.Name) %>
<%: Html.ValidationMessageFor(m => m.Name) %>
</div>
我唯一还没想到的是如何在div的id属性中获取正确的值,因此问号。最后需要注意的是,我在家,所以我还没有尝试过这个。