问题描述
我试图在模型上使用for循环(而不是foreach),但是当我在'Model'后面加点时,没有显示模型属性。你知道为什么吗?
@model IEnumerable<JPK.Models.DocumentsModel>
@using (Html.BeginForm("Update","Home",FormMethod.Post))
{
@for (var i = 0; i < Model.Count(); i++)
{
<tr>
<td>
@Html.HiddenFor(modelItem => Model[i].Account ) //it doesn't work here,after Model. no properties apppear
@Html.displayFor(modelItem => Model[i].Account) //same here
</td>
<td>
<input type="submit" value="Save" />
</td>
</tr>
}
}
解决方法
尝试一下:
@foreach (var model in Model)
{
<tr>
<td>
@Html.HiddenFor(model=> model.Account ) //it doesn't work here,after Model. no properties apppear
@Html.DisplayFor(model=> model.Account) //same here
</td>
<td>
<input type="submit" value="Save" />
</td>
</tr>
}
或者您可以尝试
@model JPK.Models.DocumentsModel[]
您仍然可以使用foreach运算符,或者如果您想立即使用索引,请将计数更改为长度:
@for (var i = 0; i < Model.Length; i++)
仅在调用控制器中的视图之前,将模型转换为数组。您可以这样转换:
var model=oldModel.ToArray();
return View(model);
,
如果要在For循环中使用它,则必须接受它作为列表。 如果必须使用IEnumerable,则必须使用带有计数器的foreach循环。
类似这样的东西。
@{var counter = 0}
@foreach (var modelItem in Model)
{
<tr>
<td>
@Html.HiddenFor(modelItem => modelItem.Account ) //it doesn't work here,after Model. no properties apppear
@Html.DisplayFor(modelItem => modelItem.Account) //same here
</td>
<td>
<input type="submit" value="Save" />
</td>
@counter++
</tr>
}
或者您可以使用var index = Model.IndexOf(modelItem)
,尝试在lambda中使用“模型”参数,而不是页面的“模型”对象:
@Html.HiddenFor(model => model[i].Account)