如何在IEnumerable上使用HTML帮助程序?

时间:2013-10-14 12:19:10

标签: asp.net-mvc-3 asp.net-mvc-4

我有以下IEnumerable

public class AuditDetailsViewModel
    {
    public string CustAddress { get; set; }
    public IEnumerable<DefectDetailsViewModel> DefectDetails { get; set; }

    }

    public class DefectDetailsViewModel
    {
        public string Description { get; set; }
        public string Comments { get; set; }
    }

在我的剃须刀视图中,我如何使用Html助手来枚举这个?如果它是一个列表,我可以做类似下面的

@model AIS.Web.Areas.Inspector.ViewModel.AuditDetailsViewModel
@for (int i = 0; i < Model.DefectDetails.Count(); i++)
{
    @Html.TextBoxFor(m => m.DefectDetails[i].Description)
}

但如果viewmodel是IEnumerable,我该怎么办?

2 个答案:

答案 0 :(得分:1)

在循环使用不可数的

时使用foreach
foreach(var temp in Model.DefectDetails){
    @Html.TextBoxFor(x => temp.Description)
}

希望这会有所帮助

答案 1 :(得分:0)

您必须使用ToList()

var items = Model.DefectDetails.ToList();

    @for (int i = 0; i < items.Count; i++)
    {
        @Html.TextBoxFor(m => m.Description[i].ToBeAudited)
    }

编辑:

您无法将索引应用于IEnumerable,这是正确的,这就是您必须使用ToList()将其转换为List的原因。

如果您使用for..each循环,那么当您回发到控制器时,文本框中的内容将不会被传输。您必须对索引器使用for ...循环,否则MVC模型绑定器无法正确绑定数据。

在你的代码中,你在迭代集合之前没有调用ToList(),因此你得到的错误是它无法将索引应用于可枚举。