如何在模型中使用for循环?

问题描述

我试图在模型上使用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)