ASP.Net MVC - 从View到Controller的列表绑定

时间:2017-07-26 19:48:24

标签: c# asp.net list asp.net-mvc-4 razor

我在控制器中的后期操作中将基本值列表绑定到模型时遇到问题。该列表返回null。

我有一个看起来像这样的viewmodel:

public class DistributionListFormModel : FormViewModel
{
    [Required(ErrorMessage = "The title is required")]
    public string Title { get; set; }

    public List<DistributionItem> DistributionItems { get; set; }
}

public class DistributionItem
{
    public string LabelText { get; set; }
    public bool Signup { get; set; }
}

好的 - 所以在我的控制器中,我使用索引方法中的一些dud值填充DistributionItems列表。这是我的观点的快照:

<div class="o-wrapper">

@using (Html.BeginForm("Submit", "MyController", FormMethod.Post))
{
    foreach (var item in Model.DistributionItems)
     {
         <p>@item.LabelText</p>
         @Html.CheckBoxFor(m => item.Signup)

    }
    <button type="submit">SUBMIT</button>

}

任何想法为什么DistributionItems列表在后置控制器中为空?我发现了一些文章,但它们都与ASP.Net的旧版本有关......

谢谢!

2 个答案:

答案 0 :(得分:1)

这是令人抓狂的事情之一,暴露了MVC中列表的模型绑定的局限性。

归结为你必须使用带索引器的for循环 - foreach循环不起作用:

for (int i = 0; i < Model.DistributionItems.Count; i++)
{
     <p>@Model.DistributionsItems[i].LabelText</p>
     @Html.CheckBoxFor(m => m.DistributionsItems[i].Signup)
}

以下是与此相关的一些参考资料,其中有更详细的内容:

Model Binding to a List MVC 4

ASP.NET MVC 5 model binding list is empty

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/

答案 1 :(得分:0)

您是否尝试过这样做:

foreach (var item in Model)
{
    @Html.HiddenFor(model => item.LabelText )
    @Html.LabelFor(model=> item.LabelText )
    @Html.CheckBoxFor(model => item.Signup)
}

之前我遇到过这个问题,发生的事情是你的控制器没有看到对象。你要返回的只是一个布尔列表。