Поддержание ViewState для FileUpload Control - PullRequest
1 голос
/ 20 мая 2009

Я создаю FileUpload элементов управления во время выполнения. Когда я нажимаю LinkButton, создается новый элемент управления FileUpload.

Теперь предположим, что я выбрал файл из FileUpload элемента управления и щелкаю LinkButton. Предыдущий элемент управления FileUpload теряет свой путь. Однако я поддерживаю ViewState каждого элемента управления, который я создаю во время выполнения, используя следующую строку:

f1.enableviewstate = true;

Как сохранить выбранный файл для элемента управления FileUpload?

Ответы [ 5 ]

2 голосов
/ 20 мая 2009

, как упоминали некоторые другие, вы не можете сохранить состояние просмотра FileUpload из-за проблем безопасности. Что вы можете сделать, это просто добавить метку чуть ниже FileUpload. Когда пользователь нажимает на кнопку ссылки, чтобы сгенерировать новую FileUpload, запускается обратная передача, где вы можете проверить, имеют ли значения элементы управления FileUpload, представленные на странице (то есть пользователь уже выбрал файл для загрузки), и если да Вы можете непосредственно начать загружать этот файл и показывать результат (путь или имя файла) на метке, просто чтобы пользователь знал, что он уже добавил этот файл. Вы также можете скрыть загрузку файла и дополнительно добавить ссылку на удаление, чтобы снова удалить загруженный файл (аналогично Gmail).

Надеюсь, это помогло.

Juri

2 голосов
/ 20 мая 2009

Шаги

  1. пользователь выбирает файл
  2. пользователь нажимает LinkButton (выдает обратную передачу, которая добавляет дополнительный элемент управления загрузкой файлов)
  3. серверная сторона должна получить файл при обратной передаче и сохранить его где-нибудь (где угодно)
  4. замените сначала <input type=file> на что-то вроде ярлыка и значка галочки (чтобы сообщить пользователю, что файл уже загружен (или даже текстовое поле только для чтения с отключенной кнопкой , чтобы скрыть элемент управления загрузкой файла) - однако вы не сможете отобразить в нем правильный путь к файлу)
  5. пользователю предоставляется новая форма с новым элементом управления загрузкой пустых файлов при отображении уже загруженных файлов.

По соображениям безопасности вы не можете манипулировать <input type=file> любым способом или формой.

Взломать подход
Если я вас правильно понял, ваша кнопка ссылки добавляет дополнительные элементы управления загрузкой файлов на вашу страницу. Вместо этого я бы в первый раз создал достаточное количество элементов управления загрузкой и отобразил только один. Другие будут скрыты с помощью CSS. После того, как пользователь щелкнет LinkButton, он будет иметь только функциональные возможности Javascript на стороне клиента, которые позволят получить дополнительный контроль. И еще ... и еще ... и еще ... пока максимум не будет достигнут.

Комплексный подход
Однако вы могли бы сделать это по-другому, используя больше Javascript и сделать его более Web-2.0. Однако вы должны загрузить эти файлы через <iframe>

1 голос
/ 20 мая 2009

Невозможно предварительно выбрать путь к файлу во входном теге загрузки файла (в отношении безопасности - пользователь должен выбрать файл), поэтому .Net не может заполнить значение из viewstate.

0 голосов
/ 23 мая 2013

По моему мнению, нет способа сохранить состояние загрузки файла в asps.net.

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

0 голосов
/ 20 мая 2009
  1. Подумайте, действительно ли вам это нужно во время выполнения?
  2. Если вам действительно нужно во время выполнения; Не забудьте добавить его в свойство Controls ближайшего контейнера. Это гарантирует, что его состояние сериализовано в ViewState.

Надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...