Элемент управления FileUpload очищает себя - PullRequest
3 голосов
/ 10 июля 2009

У меня возникли некоторые проблемы с элементом управления FileUpload, и мне было интересно, могу ли я получить некоторую помощь.

На моей странице есть элемент управления FileUpload и раскрывающийся список.

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

Есть ли способ предотвратить потерю содержимого элемента управления FileUpload во время PostBack?

Ответы [ 7 ]

8 голосов
/ 10 июля 2009

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

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

5 голосов
/ 10 июля 2009

Итак, если я правильно понимаю, в раскрывающемся списке свойство autopostback имеет значение true, и вы проверяете значение раскрывающегося списка, чтобы внести изменения по умолчанию в флажки?

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

2 голосов
/ 11 июля 2009

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

Однако я нашел решение, которое использует ajax для тех людей, которые могут быть заинтересованы.

http://forums.asp.net/t/1125781.aspx

Из поста Джессики Цао, который также содержит пример кода:

"... вы можете использовать AJAX для выполнения асинхронной обратной передачи на сервер, сделать частичную страницу, которая содержит DropDownList для обратной передачи, и страница, содержащая элемент управления FileUpload, не выполняет обратную передачу, поэтому FileUpload будет поддерживать FilePath. «

Этот метод требует использования System.Web.Extensions.dll и, как следствие, .Net 3.5 Framework.

1 голос
/ 10 июля 2009

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

Причины, по мнению других, касаются вопросов безопасности.

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

0 голосов
/ 03 июня 2014

Простое решение для предотвращения потери файла с uploadcontrol при обратной передаче - поместить uploadcontrol вне элемента управления updatepanel на странице .aspx.

например.

         <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
        <ajax:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
        </ajax:ToolkitScriptManager>
        <table>
    <tr>
    <td>
<asp:UpdatePanel runat="server" ID="Up_LeaveDetails" UpdateMode="Always">                                 
<ContentTemplate>
<asp:DropDownList ID="DDl_LeaveType" runat="server" CssClass="textfield" Width="150"
                                                                                    AutoPostBack="true" OnSelectedIndexChanged="DDl_LeaveType_SelectedIndexChanged">
                                                                                </asp:DropDownList>
</ContentTemplate>
 </asp:UpdatePanel>
</td>
    <td>
    <asp:FileUpload ID="UploadCertificate" runat="server" />
    </td>
    </tr>
        </table>
    </asp:Content>
0 голосов
/ 15 февраля 2014

Я обернул свои элементы управления автостопом внутри asp: updatepanel, и об этом позаботились, за исключением ошибки проверки.

0 голосов
/ 18 мая 2010

Вы не можете сделать это. Простое решение - перейти к Ajax-файлу Control.

...