6

你好,

我有一个包含列表的 View 类,该列表解释了用户上传的可用文件(使用 html 帮助程序呈现)。

为了在提交时维护这些数据,我在视图中添加了以下内容:

<%: Html.HiddenFor(model => model.ModelView.Files)%>

我希望 mode.ModelView.Files 列表将返回到提交操作,但不是吗?

不可能有一个列表作为隐藏字段吗?

更多信息: 用户提交保存在服务上的几个文件,保存时被称为 GUID,这个列表被发送回用户以呈现保存的图像。用户在表单中进行了一些更改并再次点击提交,当到达控制操作时,图像列表将是空的,为什么?

最好的祝福

4

2 回答 2

6

不可能有一个列表作为隐藏字段吗?

当然这是不可能的。隐藏字段只需要一个字符串值:

<input type="hidden" id="foo" name="foo" value="foo bar" />

因此,如果您需要一个列表,您需要多个隐藏字段,用于列表的每个项目。如果这些项目是复杂的对象,您需要为列表中每个项目的每个属性设置一个隐藏字段。

或者更简单的解决方案是让这个隐藏字段表示一些唯一标识符:

<input type="hidden" id="filesId" name="filesId" value="123" />

并且在您的控制器操作中,您将使用此唯一标识符从您最初获得它的地方重新获取您的集合。

另一种可能性是将您的模型持久化到Session(为了我的回答的完整性,仅提及 Session ,但这不是我实际上建议使用的东西)。

于 2011-01-31T19:31:20.693 回答
3

在我开始之前,我只想提一下,这是被标记为答案的提议解决方案之一的示例。达林说得对,这是建议解决方案的实施示例...

我有一个类似的问题,我需要在隐藏字段中存储一个 int 类型的通用列表。我尝试了标准的方法,它是:

<%: Html.HiddenFor(foo => foo.ListOfIntegers) %>

然而,这将导致和异常。所以我尝试了 Darrin 的建议并将上面的代码替换为:

<%
 foreach(int fooInt in Model.ListOfIntegers)
 { %>
<%: Html.Hidden("ListOfIntegers", fooInt) %>
<% } %>

这对我来说就像一个魅力。谢谢达林。

于 2011-08-31T14:55:13.373 回答