我在控制器中的后期操作中将基本值列表绑定到模型时遇到问题。该列表返回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的旧版本有关......
谢谢!
答案 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)
}
以下是与此相关的一些参考资料,其中有更详细的内容:
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)
}
之前我遇到过这个问题,发生的事情是你的控制器没有看到对象。你要返回的只是一个布尔列表。