ASP: загрузить опубликованный файл потерян во время обратной передачи - PullRequest
0 голосов
/ 29 марта 2010

Я использую элемент управления asp: upload для загрузки изображения и использую свойство postsfile для вставки пути к базе данных. В моей форме есть выпадающий список с autopostback = true, где пользователь может выбрать тему, чтобы заполнить список категорий флажком. Во время этой обратной передачи значение отправленного файла теряется, и после небольшого исследования я обнаружил, что значение отправленного файла не поддерживается в viewstate по соображениям безопасности. Кто-нибудь еще узнал, как обойти это?

Ответы [ 4 ]

2 голосов
/ 29 марта 2010

Вот как это работает. Значение intput type = "file" никогда не используется при разборе HTML-страницы. Это огромный риск для безопасности, поэтому ни один современный браузер не позволит им «сохранять» ценности. Таким образом, в ASP.NET каждый постбэк «теряет» значение.

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

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

1 голос
/ 29 марта 2010

Атрибут value элемента входного файла просто не может быть установлен ничем, кроме взаимодействия с пользователем. Вот как это работает, и это не изменится из-за проблем безопасности. Тем не менее, ваше решение состоит в том, чтобы устранить обратную передачу.

0 голосов
/ 29 марта 2010

Можно попробовать элемент управления AsynchFileUpload в AjaxControlToolkit, но для стандартной загрузки файла не существует обходного пути, если вы не сохраните файл во временную папку и не загрузите список файлов из этой временной папки.

0 голосов
/ 29 марта 2010

Я бы попытался загрузить список флажков через JavaScript / AJAX, возможно сохраняя значения списка флажков в скрытом поле, чтобы я мог сохранить значения при обратной передаче.

Это может быть не идеально, но если вы хотите сделать все это без обратной передачи, в какой-то момент вам придется использовать JavaScript.

...