在控制器上编辑IEnumerable null

时间:2013-02-02 21:17:54

标签: asp.net-mvc-4

我不能在此上使用一个List<album>,仅在查看whitout编辑标签时,我有一个视图正常工作,但我无法编辑它们的一个列表。

@model IEnumerable<MyMixtapezServerCodeHomePage.Models.album>
@using (Html.BeginForm("FeatureSystem", "album", FormMethod.Post))
{

<table>

    <tr>
        <th>
            @Html.DisplayNameFor(model => model.name)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.feature)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.feature_order)
        </th>
        <th></th>
    </tr>

    @foreach (var item in @Model)
    {

        <tr>
            <td>

                <div class="editor-label">
                    @Html.LabelFor(model => item.name)
                </div>
                <div class="editor-field">
                    @Html.EditorFor(model => item.name,"album")
                    @Html.ValidationMessageFor(model => item.name)
                </div>
            </td>
            <td>
                <div class="editor-label">
                    @Html.LabelFor(model => item.feature,"album")
                </div>
                <div class="editor-field">
                    @Html.EditorFor(model => item.feature)
                    @Html.ValidationMessageFor(model => item.feature)
                </div>
            </td>
            <td>
                <div class="editor-label">
                    @Html.LabelFor(model => item.feature_order)
                </div>
                <div class="editor-field">
                    @Html.EditorFor(model => item.feature_order,"album")
                    @Html.ValidationMessageFor(model => item.feature_order)
                </div>
            </td>
            <td></td>
        </tr>





    }
    <input type="submit" />
</table>}

CONTROLLER

        [HttpPost]
    public ActionResult FeatureSystem(IEnumerable<album> albums)
    {
        foreach (album album in albums)
        {
            if (ModelState.IsValid)
            {
                albumRepository.Update(album);
                albumRepository.SaveChanges();
            }
        }

        return RedirectToAction("Index");
    }

我收到的专辑是空的,为什么?我可以编辑一个列表吗?我只需要这个。

2 个答案:

答案 0 :(得分:2)

在视图中使用IList而不是IEnumerable,并用for循环替换foreach循环。

第1步:

使用

@model IList <MyMixtapezServerCodeHomePage.Models.album>

而不是

@model IEnumerable<MyMixtapezServerCodeHomePage.Models.album>

第2步:

使用

@for (var i = 0; i < Model.Count; i++) 

而不是

@foreach (var item in @Model)

有关详细信息,请参阅How to pass IEnumerable list to controller in MVC including checkbox state?

答案 1 :(得分:0)

我相信自从mvc3

以来这没有改变

所以要拥有一个可编辑的集合,你必须使用for循环,而不是foreach,或者绑定不起作用。

@for(var i = 0; i < Model.Count; i++)
 {
    <tr>
        <td>

            <div class="editor-label">
                @Html.LabelFor(model => Model[i].name)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => Model[i].name,"album")
                @Html.ValidationMessageFor(model => Model[i].name)
            </div>
        </td>
        <td>

  ...
}

看看this,旧的,但我认为没有过时。