迭代MVC 4中的Model项

时间:2013-12-30 09:55:24

标签: html asp.net-mvc-4 view model

我想迭代从foreach(var item in Model)返回的项目。与for(int i=0; i <item.length; i++)类似,然后为模型返回的项目编写单独的html代码。

不幸的是,由于该属性不存在,我似乎无法访问item.length。有谁知道如何迭代每个模型项目,以便我可以节省写很多不必要的HTML?

所以更多的背景代替了不清楚的问题:

假设我的模型是

public class RegisterViewModel
{
    public string Name { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
}

现在我使用DB调用来访问模型数据并通过

将其解析到视图
RegisterViewModel model= db.RegisterViewModel.Where(data => data.Name == User.Name);

现在我通过view(model)

将此模型传递给视图

现在要显示所有学生的数据,我可以使用

model IEnumerable<Project.Models.RegisterViewModel>

@foreach(item in Model) {
    @for(int i=0; i<item.Length;i++) { \\this is where I would like to iterate though the item
    if(item[i]!= null) // using a for loop would avoid me having to write this if condition multiple times.
         <div>@item[i].value</div>
    }

}

1 个答案:

答案 0 :(得分:0)

您无法对item进行迭代,因为item的类型为RegisterViewModel。这样做是没有意义的。

如果要显示值,可以直接使用它:

@model IEnumerable<Project.Models.RegisterViewModel>

@foreach(item in Model) {
    <div>@item.Value</div>
}

另外请记住,控制器中的以下代码行是错误的:

RegisterViewModel model = db.RegisterViewModel.Where(data => data.Name == User.Name);

.Where扩展方法返回IEnumerable<T>,因此您宁愿拥有:

IEnumerable<RegisterViewModel> model = db.RegisterViewModel.Where(data => data.Name == User.Name);
return View(model);

或者如果您愿意:

var model = db.RegisterViewModel.Where(data => data.Name == User.Name);
return View(model);