Asp.net mvc 2 ASP.NET MVC 2和列表是否作为隐藏值?
你好, 我有一个视图类,它包含一个列表,这个列表解释了用户上传的可用文件(用html助手呈现) 为了在提交时维护此数据,我在视图中添加了以下内容:Asp.net mvc 2 ASP.NET MVC 2和列表是否作为隐藏值?,asp.net-mvc-2,hidden-field,Asp.net Mvc 2,Hidden Field,你好, 我有一个视图类,它包含一个列表,这个列表解释了用户上传的可用文件(用html助手呈现) 为了在提交时维护此数据,我在视图中添加了以下内容: <%: Html.HiddenFor(model => model.ModelView.Files)%> model.ModelView.Files)%%> 我希望mode.ModelView.Files列表会在提交时返回到操作,但不是吗 不能将列表作为hiddenfield吗 更多信息:用户提交保存在服务上的两个文件,保存后这
<%: Html.HiddenFor(model => model.ModelView.Files)%>
model.ModelView.Files)%%>
我希望mode.ModelView.Files列表会在提交时返回到操作,但不是吗
不能将列表作为hiddenfield吗
更多信息:用户提交保存在服务上的两个文件,保存后这些文件被称为GUID,是发送回用户以呈现保存图像的列表。用户在表单中做了一些更改,然后再次点击submit。当进入控件操作时,图像列表将为空,为什么
问候
不能将列表作为hiddenfield吗
当然,这是不可能的。隐藏字段仅接受单个字符串值:
<input type="hidden" id="foo" name="foo" value="foo bar" />
因此,如果您需要一个列表,那么对于列表中的每个项目,您需要多个隐藏字段。如果这些项是复杂对象,则需要为列表中每个项的每个属性设置一个隐藏字段
或者,更简单的解决方案是使用此隐藏字段来表示某个唯一标识符:
<input type="hidden" id="filesId" name="filesId" value="123" />
在控制器操作中,您将使用此唯一标识符从最初获得的位置重新蚀刻您的集合
另一种可能性是将您的模型持久化到
会话中(为了回答的完整性,仅提及该会话,但我并不建议使用它)。在开始之前,我只想提到,这是一个标记为答案的建议解决方案的示例。Darrin说得对,下面是一个建议解决方案的实施示例
我有一个类似的问题,我需要将int类型的泛型列表存储在hiddenfield中。我尝试了标准方法,即:
<%: Html.HiddenFor(foo => foo.ListOfIntegers) %>
foo.listofInteger)%>
然而,这将导致和例外。因此,我尝试了Darrin的建议,并用以下代码替换了上面的代码:
<%
foreach(int fooInt in Model.ListOfIntegers)
{ %>
<%: Html.Hidden("ListOfIntegers", fooInt) %>
<% } %>
这对我很有吸引力。谢谢你,达林。你为什么不推荐这个课程?在操作之间存储数据的建议是什么?我该如何获得uniqe标识符?@SnowJim,数据已经存储在您的数据库中。因此,只需查询数据库以重新提取数据。当然,为了避免在每次请求时命中数据库,您可以使用缓存等。。。我尽量避免使用会话,因为它会导致有状态和可伸缩性较差的应用程序。例如,默认情况下,会话存储在内存中,当您在服务器场中运行时,您需要将其卸载到其他存储(进程外或SAL服务器)。