我正在使用一个包含列表作为属性的模型。我用从SQL Server抓取的项目填充此列表。我希望列表隐藏在视图中,并传递给POST操作。稍后,我可能想用jQuery将更多项添加到这个列表中,这会使数组在以后不适合扩展。通常,您将使用
@Html.HiddenFor(model => model.MyList)
来实现此功能,但由于某些原因,POST中的列表始终为空。
很简单的问题,有人知道MVC为什么会这样吗?
发布于 2014-09-29 14:13:23
我刚刚遇到了这个问题,并通过以下操作简单地解决了它:
@for(int i = 0; i < Model.ToGroups.Count; i++)
{
@Html.HiddenFor(model => Model.ToGroups[i])
}
通过使用for
而不是foreach
,模型绑定将正确工作,并获取列表中的所有隐藏值。这似乎是解决这个问题的最简单的方法。
发布于 2012-02-22 05:24:58
HiddenFor与DisplayFor或EditorFor不同。它不适用于集合,只能使用单个值。
您可以使用MVC Futures项目中提供的Serialize HTML帮助器将对象序列化为Hidden字段,否则您必须自己编写代码。更好的解决方案是简单地序列化某种类型的ID,然后在回发时从数据库重新获取数据。
发布于 2014-01-15 23:32:35
这有点麻烦,但如果@Html.EditorFor
或@Html.DisplayFor
适用于你的列表,如果你想确保它在post请求中发送但不可见,你可以只使用display: none;
来隐藏它,例如:
<div style="display: none;">@Html.EditorFor(model => model.MyList)</div>
https://stackoverflow.com/questions/9385286
复制相似问题