7

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

视图模型

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

EditorFor 模板(称为 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 的说法。

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

4

1 回答 1

6

错误信息是正确的,如果你想使用你的模板名称,它应该是这样的:

<div id="contractContainer">
    @for (int i = 0; i < item.ContractList.Count; i++) {
        @Html.EditorFor(item => item.ContractList[i], "ContractTemplate")
    }
</div> 

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

于 2011-11-22T15:05:59.013 回答