【问题标题】:ASP.Net MVC - List binding from View to Controller [duplicate]ASP.Net MVC - 从视图到控制器的列表绑定 [重复]
【发布时间】:2017-07-26 19:48:24
【问题描述】:

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

我有一个看起来像这样的视图模型:

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; }
}

好的 - 所以在我的控制器中,我使用 index 方法中的一些无效值填充 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 版本有关...

谢谢!!

【问题讨论】:

  • 看看你的控制器动作真的很有帮助。
  • 发布您将模型传递给视图的代码以及关于模型创建的所有内容。

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


【解决方案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/

【讨论】:

  • 哇,两次投反对票,没有 cmets,我错过了什么明显的错误吗?
  • @Pat 使用foreach 绝对有问题。 HTML 助手不会在呈现的 HTML 中生成唯一索引,这意味着模型绑定器无法确定在绑定到集合时应该如何关联元素。
  • @EricPetroelje 不,你的答案是正确的。不过,我链接到副本的原因是因为人们应该了解编辑器模板的工作原理,因为他们使这种情况变得如此微不足道。
  • @JohnH - 是的,编辑器模板是处理这种情况的最佳方式。只是不想引入可能使 OP 在这里遇到的核心问题变得模糊的其他概念。也添加了我的近距离投票。
  • 啊,好吧,我明白你在说什么,那只是隐式绑定的问题。很高兴知道——我的立场是正确的
【解决方案2】:

您是否尝试过这样做:

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

我之前遇到过这个问题,现在发生的情况是您的控制器看不到该对象。您返回的只是一个布尔值列表。

【讨论】:

  • 如果这不起作用,您可以随时使用 jQuery 构建您的列表并使用 Ajax 发布。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多