ASP.NET MVC 2Editor对于不生成正确的名称属性

时间:2010-06-29 12:53:52

标签: asp.net-mvc-2

我有以下EditorFor模板:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<List<ContactDto>>" %>
<%@ Import Namespace="c2.bases.dto.structure"%>
<%
    for (var i = 0; i < ViewData.Model.Count; i++)
    {%>
         <%=Html.EditorFor(x => x[i])%>
    <%}
%>

问题是它没有生成正确的name属性,它为其中一个元素生成以下name属性:

name="TrainingLookUpContainer.Contacts.[0].Surname"

你可以看到有一个额外的'。'最后一个联系人之后和索引器[0]之前的字符。

应该是

name="TrainingLookUpContainer.Contacts[0].Surname"

由于这个额外的'。'而未绑定对象。

正在从另一个页面调用此编辑器:

<div style="background: #fff;height:100%">
    <%= Html.EditorFor(x => x.TrainingLookUpContainer.Contacts, "TrainingCategory")%>
</div>

我发现这篇文章似乎表明我做得对link text

我认为这可能是lamda,但我认为这可能是因为嵌套造成的错误。

我有一个解决方法,我传递了Containing对象TrainingLookUpContainer,一切都很好。

有人能建议一种更好的方式来绑定List吗?

3 个答案:

答案 0 :(得分:0)

而不是:

for (var i = 0; i < ViewData.Model.Count; i++)
{%>
     <%=Html.EditorFor(x => x[i])%>
<%}

简单地写:

<%= Html.EditorForModel() %>

将生成正确的名称属性并缩短您的代码。

答案 1 :(得分:0)

您根本不需要此模板。

MVC 2已经包含了一个集合模板,它可以完全按照您的要求进行操作,并创建正确的名称。您可以通过下载MVC 2 Futures包并查找EditorTemplates / Collection.ascx文件来查看此模板中的代码。这些名称需要正确修补,并且该代码会向您显示如何执行此操作(如果由于某种原因您无法使用内置的Collection模板)。

答案 2 :(得分:0)

你是什么意思他不应该使用EditorFor x [i]。他应该使用任何合乎逻辑的解决方案。例如,我有类似的情况,但我需要为我的集合(数组,列表)属性提供自定义的添加/删除编辑器,这个问题完全阻止了我。为了能够使用这个集合属性,我被迫将整个模型传递给编辑器。这个编辑器是一个bug,一个应该很快就有一个quickfix的bug,一个可以透明地应用于生产服务器的quickfix,而无需管理员做任何事情。