ASP.NET MVC 2 и списки как скрытые значения? - PullRequest
6 голосов
/ 31 января 2011

Привет,

У меня есть класс View, который содержит список, этот список объясняет доступные файлы, загруженные пользователем (отображаемые с помощью помощника html).

Чтобы сохранить эти данные при отправке, я добавил к представлению следующее:

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

Я надеялся, что список mode.ModelView.Files вернется к действию при отправке, но это не так?

Разве невозможно иметь список в качестве скрытого поля?

Дополнительная информация: Пользователь отправляет несколько файлов, сохраненных в службе, когдасохраненные они называются GUID, и этот список отправляется обратно пользователю для визуализации сохраненных изображений.Пользователь вносит некоторые изменения в форму и снова нажимает «Отправить». При переходе к управляющему действию список изображений будет пустым, почему?

BestRegards

Ответы [ 2 ]

6 голосов
/ 31 января 2011

Разве невозможно иметь список в качестве скрытого поля?

Конечно, это невозможно.Скрытое поле принимает только одно строковое значение:

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

Так что если вам нужен список, вам нужно несколько скрытых полей для каждого элемента списка.И если эти элементы являются сложными объектами, вам нужно скрытое поле для каждого свойства каждого элемента списка.

Или гораздо более простое решение для этого скрытого поля, чтобы представить некоторый уникальный идентификатор:

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

и в своем действии контроллера вы будете использовать этот уникальный идентификатор для повторного получения вашей коллекции, откуда бы вы ее изначально не получали.

Еще одна возможность - сохранить вашу модель в Session (просто упомянув Session дляради полноты моего ответа, но я бы не рекомендовал его использовать).

3 голосов
/ 31 августа 2011

Прежде чем начать, я просто хотел бы упомянуть, что это пример одного из предложенных решений, который был отмечен как ответ.Даррин понял все правильно, вот пример реализации предложенного решения ...

У меня была похожая проблема, когда мне нужно было сохранить общий список типа int в скрытом поле.Я попробовал стандартное apporach, которое будет:

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

Это, однако, будет причиной и исключением.Поэтому я попробовал предложение Даррина и заменил приведенный выше код следующим:

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

Для меня это сработало.Спасибо, Даррин.

...