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

前端之家收集整理的这篇文章主要介绍了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;}
}@H_403_5@ 
 

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>@H_403_5@ 
 

摘自我的观点

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

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

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

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

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

解决方法

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

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

猜你在找的asp.Net相关文章