我有一个关于MVC3的编辑器助手的奇怪问题。事情是这样的:我正在尝试显示一个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" })
</p>
摘自我的观点
<div id="contractContainer">
@Html.EditorFor(item=>item.ContractList)
</div>
这很好用。但它试图这样做:
<div id="contractContainer">
@Html.EditorFor(item=>item.ContractList, "ContractTemplate")
</div>
它抛出InvalidOperationException
说我必须传递一个简单的ChkViewModel而不是GenericList ChkViewModel。
我只是问这个,因为我试图创建另一个复选框列表,我无法使其工作(甚至不显示复选框),当我尝试设置模板名称时,我至少可以看到复选框,它抛出了那个错误。
答案 0 :(得分:6)
错误消息是正确的,如果您想使用模板名称,它应如下所示:
<div id="contractContainer">
@for (int i = 0; i < item.ContractList.Count; i++) {
@Html.EditorFor(item => item.ContractList[i], "ContractTemplate")
}
</div>
这类似于ASP.NET MVC在第一种情况下在幕后为您做的事情(它遍历集合并调用您的模板)。