首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在ASP.NET MVC中,@Html.HiddenFor不能处理列表

在ASP.NET MVC中,@Html.HiddenFor不能处理列表
EN

Stack Overflow用户
提问于 2012-02-22 05:15:26
回答 12查看 90.5K关注 0票数 111

我正在使用一个包含列表作为属性的模型。我用从SQL Server抓取的项目填充此列表。我希望列表隐藏在视图中,并传递给POST操作。稍后,我可能想用jQuery将更多项添加到这个列表中,这会使数组在以后不适合扩展。通常,您将使用

代码语言:javascript
复制
@Html.HiddenFor(model => model.MyList)

来实现此功能,但由于某些原因,POST中的列表始终为空。

很简单的问题,有人知道MVC为什么会这样吗?

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2014-09-29 14:13:23

我刚刚遇到了这个问题,并通过以下操作简单地解决了它:

代码语言:javascript
复制
@for(int i = 0; i < Model.ToGroups.Count; i++)
{
    @Html.HiddenFor(model => Model.ToGroups[i])
}

通过使用for而不是foreach,模型绑定将正确工作,并获取列表中的所有隐藏值。这似乎是解决这个问题的最简单的方法。

票数 179
EN

Stack Overflow用户

发布于 2012-02-22 05:24:58

HiddenFor与DisplayFor或EditorFor不同。它不适用于集合,只能使用单个值。

您可以使用MVC Futures项目中提供的Serialize HTML帮助器将对象序列化为Hidden字段,否则您必须自己编写代码。更好的解决方案是简单地序列化某种类型的ID,然后在回发时从数据库重新获取数据。

票数 29
EN

Stack Overflow用户

发布于 2014-01-15 23:32:35

这有点麻烦,但如果@Html.EditorFor@Html.DisplayFor适用于你的列表,如果你想确保它在post请求中发送但不可见,你可以只使用display: none;来隐藏它,例如:

代码语言:javascript
复制
<div style="display: none;">@Html.EditorFor(model => model.MyList)</div>
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9385286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档