asp.net-mvc3 EditorFor模板名称问题

关于来自MVC3的editorFor helper我有一个奇怪的问题.事情是这样的:我正在尝试显示一个checkBoxList,如果我不调用明确的模板名称,它就可以工作.但是,如果我尝试使用模板名称,它会抛出一个异常,说我正在尝试传递一个通用列表,而我应该简单地传递我的viewmodel.我将展示一些代码以使其更易理解:

视图模型

public class Chkviewmodel
{
  public string ContractName {get;set;}
  public string Contract {get;set;}
  public bool Checked {get;set;}
}

EditorFor Template(称为ContractTemplate)

@model Models.Chkviewmodel
<p>
    @Html.HiddenFor(x => x.Contract )
    @Html.LabelFor(x => x.ContractName,Model.ContractName )
    @Html.CheckBoxFor(x => x.Checked,new { @class = "chkContract" })
&nbsp;       
</p>

摘自我的观点

<div id="contractContainer">
  @Html.EditorFor(item=>item.ContractList)
</div>

这很好用.但它试图这样做:

<div id="contractContainer">
  @Html.EditorFor(item=>item.ContractList,"ContractTemplate")
</div>

它抛出InvalidOperationException,说我必须传递一个简单的Chkviewmodel而不是GenericList Chkviewmodel.

我只是问这个,因为我试图创建另一个复选框列表,我无法使它工作(甚至不显示复选框),当我试图设置模板名称,这样我至少可以看到复选框,它抛出了那个错误.

解决方法

错误消息是正确的,如果要使用模板名称,它应如下所示:
<div id="contractContainer">
    @for (int i = 0; i < item.ContractList.Count; i++) {
        @Html.EditorFor(item => item.ContractList[i],"ContractTemplate")
    }
</div>

这类似于ASP.NET MVC在第一种情况下在幕后为您做的事情(它遍历集合并调用您的模板).

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...