3

该模型:

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>

发出的名称/标识值是:

<input type="text" value="" name="Entries.[0].Name" id="Entries__0__Name">

所以名称在属性名称和 [0] 之间有一个句点,并且 id 在索引号的左侧有一个额外的下划线。这不适用于默认模型绑定器。有没有一种方法可以与默认模型绑定器一起使用?

4

1 回答 1

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 属性中获取正确的值,因此是问号。最后的警告是我在家,所以我还没有真正尝试过。

于 2011-02-11T01:34:17.187 回答