如何在[HttpPost]动作中获取绑定列表?

时间:2013-12-17 01:21:32

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

我有一个强类型视图,它的模型是一个列表。我想知道为什么我不能在控制器动作中恢复模型?

我在表单提交控件上观察到的断点开始起作用但列表为空。

以下是我的观点:

@model List<BL.Model.Speaker>
@using (Html.BeginForm())
{
    <table>
            @{
    foreach (var speaker in Model)
    { 
                <tr>
                    <td>@Html.EditorFor(s => speaker.Name)</td>
                    <td>@Html.EditorFor(s => speaker.Email)</td>

                </tr>
    }
           }            
    </table>
    @Html.ActionLink("Submit", "All");
}

我的控制器操作如下:

public ActionResult All(List<Speaker> model)
        {
            List<Speaker> speakers = database.Speakers.ToList();

            return View(speakers);


        }

MVC冠军请帮助我。我想要做的是在编辑之后,想要查看我的帖子操作的更新值。

很赞赏你的帮助。

由于

1 个答案:

答案 0 :(得分:2)

创建一个扬声器列表ViewModel,然后使用ViewModel代替在视图中使用foreach,如下所示:

<强>视图模型

public class SpeakerViewModel
{
    public List<Speaker> Speakers { get; set; } 
}

查看

@model  Demo.Models.SpeakerViewModel

@using (Html.BeginForm())
{
    <table>
        @for (int i = 0; i < Model.Speakers.Count; i++)
        {
        <tr>
            <td>@Html.EditorFor(m => m.Speakers[i].Name)</td>

            <td>@Html.EditorFor(m => m.Speakers[i].Email)</td>
        </tr>
        }
    </table>
    <input type="submit" value="Submit"/>
}

<强>动作

  [HttpGet]
    public ActionResult All()
    {
        var model = new SpeakerViewModel()
        {
            Speakers = database.Speakers.ToList();
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult All(SpeakerViewModel model)
    {
        if (ModelState.IsValid)
        {
            //
        }
        return View(model);
    }