FileUpload не работает в панели обновления
Итак, что я пытаюсь сделать, пользователь выбирает файл для загрузки. Поскольку я только собираюсь принимать изображения, я проверю расширение. Я также хочу ограничить размер файла до 2 Мбайт, поэтому я проверю его (еще не реализованный в коде). Если файл, который они выбрали, проходит, я хочу, чтобы метка говорила "File Accepted" и сохранила информацию о загрузке файла для более позднего нажатия кнопки. Это произойдет, как только пользователь завершит заполнение остальной части формы. В конце концов, я поставлю элемент UpdateProgress на странице, пока он проверяет, разрешен ли файл. Я бы предпочел не возвращать его для этого, так что, если я смогу заставить его работать, это будет здорово. BTW, все это будет нормально работать, если я вынесу ярлык из панели обновлений.
Что произойдет, когда я запустил это, он перейдет в инструкцию else из первого, если и возвращает "Пожалуйста, выберите файл". Это означает, что FileUpload1.HasFile возвращает false. Единственная причина, по которой я вижу, что это происходит, заключается в том, что UpdatePanel не может получить доступ к этой информации из элемента управления FileUpload?
Код за:
Label SubmitButtonLabel2= (Label)UpdatePanel1.FindControl("SubmitButtonLabel");
if (FileUpload1.HasFile)
{
string[] fileName = FileUpload1.FileName.Split('.');
if ((fileName[fileName.Length - 1] == "jpg") ||
(fileName[fileName.Length - 1] == "gif") ||
(fileName[fileName.Length - 1] == "bmp") ||
(fileName[fileName.Length - 1] == "jpeg") ||
(fileName[fileName.Length - 1] == "png"))
{
SubmitButtonLabel2.Text = "File Accepted.";
}
else
{
SubmitButtonLabel2.Text = "File type not allowed. Please choose another.";
}
}
else
{
SubmitButtonLabel.Text = "Please select a file.";
}
Страница:
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<div>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="SubmitButton" runat="server" Text="Submit File" OnClick=SubmitButton_Click />
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="always">
<ContentTemplate>
<asp:Label ID="SubmitButtonLabel" runat="Server" />
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="SubmitButton" />
</Triggers>
</asp:UpdatePanel>
</div>
</form>
</body>
Ответы
Ответ 1
Нет необходимости делать что-либо, что вам просто нужно, чтобы добавить данные из нескольких частей в вашу форму.
Page.Form.Attributes.Add("enctype", "multipart/form-data");
Подробнее см. следующую ссылку.
http://knowledgebaseworld.blogspot.com/2009/02/file-upload-not-working-with-update.html
Ответ 2
<Triggers>
<asp:PostBackTrigger ControlID="YourControlID" />
</Triggers>
Добавьте триггер для UpdatePanel
и введите ControlID
. Если вы используете TabContainer
, используйте идентификатор контейнера табуляции.
Ответ 3
Добавьте эту строку в свой page_load
ScriptManager.GetCurrent(this).RegisterPostBackControl(this.Button);
Ответ 4
Если вы используете элемент управления FileUpload в панели "Обновление", вы должны установить PostbackTrigger для кнопки, в которой вы пишете код для сохранения загружаемого файла.
Теперь, следуя коду, у меня есть кнопка btnSave для сохранения файла в папке загрузки. Поэтому я установил для него postbacktrigger.
<Triggers>
<asp:PostBackTrigger ControlID="btnSave" />
</Triggers>
Надеюсь, это поможет вам.
Ответ 5
Элемент управления по умолчанию asp.net FileUpload никогда не будет работать с UpdatePanel. Вам нужно специальное AsyncFileUpload, как определено в AjaxControl Toolkit. Это
http://www.asp.net/ajax/ajaxcontroltoolkit/samples/AsyncFileUpload/AsyncFileUpload.aspx
alt text http://ruchitsurati.net/files/fileupload.png
<ajaxToolkit:AsyncFileUpload OnClientUploadError="uploadError"
OnClientUploadComplete="uploadComplete" runat="server"
ID="AsyncFileUpload1" Width="400px" UploaderStyle="Modern"
UploadingBackColor="#CCFFFF" ThrobberID="myThrobber" />
Ответ 6
Не забудьте изменить тип формы, чтобы разрешить загрузку файлов (enctype или что-то в этом роде, я не перед Visual Studio, поэтому не может быть так точно.)
У меня была та же проблема.
Ответ 7
Сделайте кнопку для загрузки файла в качестве триггера панели "Загрузить"
Что-то вроде этого,
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Panel ID="pnlUploadImage" runat="server">
<asp:FileUpload ID="fuldImage" runat="server"></asp:FileUpload>
<asp:LinkButton ID="lnkbUpload" runat="server" onclick="lnkbUpload_Click">Add</asp:LinkButton>
</asp:Panel>
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="lnkbUpload"/></Triggers>
</asp:UpdatePanel>
Ответ 8
Page.Form.Attributes.Add("enctype", "multipart/form-data");
только это поможет вашей проблеме
отсылайте this
Ответ 9
Я получил его работу после использования двух решений, размещенных здесь.
Мне пришлось добавить оба
Page.Form.Attributes.Add("enctype", "multipart/form-data");
в Page_Load, а также
<Triggers>
<asp:PostBackTrigger ControlID="btnUpload" />
</Triggers>
в разметке панели обновления.
Ответ 10
Ответ можно найти здесь
В основном это запрещено по умолчанию из-за соображений безопасности javascript и браузера. Но это обходное решение.
Ответ 11
Я предполагаю, что HasFile будет заполнен только тогда, когда сообщение уже сделано, а не раньше.
Возможно, вы захотите проверить, заполнено ли FileUpload1.FileName до того, как сообщение будет выполнено, но я сомневаюсь в этом.