2010-06-29 19 views
0

我有以下EditorFor模板:ASP.NET MVC 2EditorFor不产生正确的名称属性

<%@ 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="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,一切都很好。

任何人都可以提出一个更好的方式,只是绑定到列表?

回答

0

你根本不需要这个模板。

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

0

相反的:

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

简单地写:

<%= Html.EditorForModel() %> 

这将产生正确的名称属性,使你的代码更短。

+0

Html.EditorForModel()在此实例中返回“{}”。 – dagda1 2010-06-29 14:06:18

0

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

相关问题