2011-01-31 49 views
6

嗨,ASP.NET MVC 2并列为隐藏值?

我有一个包含列表的视图类,这个列表解释说,用户已经上传了可用的文件(用HTML辅助渲染)。

为了保持对提交我加入这个数据下面的观点:

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

我希望在mode.ModelView.Files列表将返回到上提交的行动,但它是不是?

是不可能有一个列表为hiddenfield?

更多信息:用户提交一对夫妇被保存在服务,当保存大公被refered为GUID,是这个名单被发回给用户呈现保存的图像文件。用户在表单中进行一些更改,然后再次提交提交时,图像列表在获取控件操作时将为空,为什么?

BestRegards

回答

6

是没可能有一个列表,hiddenfield?

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

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

所以如果你需要,你需要多个隐藏字段,列表中的每个项目的列表。如果这些项目是复杂的对象,则需要列表中每个项目的每个属性都有一个隐藏字段。

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

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

,并在你的控制器动作,你会使用这个唯一识别码,无论你最初得到它重新获取您的收藏。

还有一种可能性是将你的模型保存到Session(只是提及Session的完整性,但我不推荐使用它)。

+0

你为什么不推荐Session?在行动之间存储数据的建议是什么?我应该如何获得唯一的标识符? – Banshee 2011-02-01 12:30:43

3

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

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

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

这会导致和异常。所以我尝试了Darrin的建议并用上面的代码替换了上面的代码:

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

这对我来说就像是一种魅力。谢谢Darrin。