ASP.NET MVC 2 and lists as Hidden values?

霸气de小男生 提交于 2019-12-08 20:38:18

问题


Hi,

I have a View class that contains a list, this list explains the available files that the user have uploaded (rendered with an html helper).

To maintain this data on submit I have added the following to the view :

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

I was hoping that the mode.ModelView.Files list would be returned to the action on submit but it is not?

Is it not possible to have a list as hiddenfield?

More information : The user submit a couple of files that is saved on the service, when saved thay are refered to as GUID and is this list that is sent back to the user to render the saved images. The user makes some changes in the form and hit submit again the image list will be empty when getting to the control action, why?

BestRegards


回答1:


Is it not possible to have a list as hiddenfield?

Of course that it is not possible. A hidden field takes only a single string value:

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

So if you need a list you need multiple hidden fields, for each item of the list. And if those items are complex objects you need a hidden field for each property of each item of the list.

Or a much simpler solution is for this hidden field to represent some unique identifier:

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

and in your controller action you would use this unique identifier to refetch your collection from wherever you initially got it.

Yet another possibility is to persist your model into the Session (just mentioning the Session for the completeness of my answer sake, but it's not something that I would actually recommend using).




回答2:


Before I start I'd just like to mention that this is an example of one of the proposed solutions that was marked as the answer. Darrin got it right, here's an example of an implementation of the suggested solution...

I had a similar problem where I needed to store a generic list of type int in a hiddenfield. I tried the standard apporach which would be:

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

That would however cause and exception. So I tried Darrin's suggestion and replaced the code above with this:

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

This worked like a charm for me. Thanks Darrin.



来源:https://stackoverflow.com/questions/4855128/asp-net-mvc-2-and-lists-as-hidden-values

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!