У меня есть элемент управления FileUpload
(и он не внутри UpdatePanel
), а его свойство hasFile
всегда False
.
<asp:FileUpload ID="certificateUploader" runat="server"/>
Любая мысль?
У меня есть элемент управления FileUpload
(и он не внутри UpdatePanel
), а его свойство hasFile
всегда False
.
<asp:FileUpload ID="certificateUploader" runat="server"/>
Любая мысль?
Добавьте триггер для вашей панели обновления
<Triggers>
<asp:PostBackTrigger ControlID="btnCertificateUpload" />
</Triggers>
Это вызовет обратную передачу при нажатии кнопки загрузки.
Также добавьте строку ниже в Page_Load
Page.Form.Attributes.Add("enctype", "multipart/form-data");
Вы не можете загружать файлы с помощью AJAX = > вы не должны размещать элемент управления FileUpload внутри UpdatePanel, потому что эта UpdatePanel отправляет на сервер запрос AJAX.
Я также загрузил файл, используя элемент управления FileUpload, но свойство HasFile вернул false. Оказывается, что FileUpload.HasFile также ложно, если вы загружаете пустой файл. В этом случае при добавлении текста в файл, который вы хотите загрузить, свойство Has file вернет true.
В дополнение к примеру, предоставленному службой @dbFrameIT:
<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Always" runat="server">
<ContentTemplate>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="UploadButton" runat="server" Text="Upload Selected File" OnClick="UploadButton_Click" />
<asp:Label ID="UploadDetails" runat="server" Text=""></asp:Label>
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="UploadButton" />
</Triggers>
</asp:UpdatePanel>
ваш код позади (С#)
protected void UploadButton_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile == false)
{
UploadDetails.Text = "Please first select a file to upload...";
}
else
{
string FileName = FileUpload1.FileName;
UploadDetails.Text = string.Format(
@"Uploaded file: {0}<br />
File size (in bytes): {1:N0}<br />
Content-type: {2}",
FileName,
FileUpload1.FileBytes.Length,
FileUpload1.PostedFile.ContentType);
// Save the file
string filePath = Server.MapPath("~/Brochures/" + FileUpload1.FileName);
FileUpload1.SaveAs(filePath);
}
}
все время, когда речь шла о разрешениях, которые я имел (или не должен был быть более конкретным) над файлом, пытающимся загрузить, я предоставил пользователю достаточные разрешения, и все прошло хорошо.
Большое спасибо за вашу помощь и сообщения.
Иногда fileUpload имеет проблемы. Вы можете использовать простой ввод:
<input id="filMyFile" type="file" runat="server"></input>
В коде сохраните файл на сервере:
HttpPostedFile myFile = filMyFile.PostedFile;
string fullPath=Server.MapPath("~/UploadDocuments/") + myFile.FileName;
myFile.SaveAs(fullPath);
И файл будет сохранен в папке UploadDocuments в вашем приложении ASP.NET (сервер)
Вы можете попытаться снять свою кнопку с UpdatePanel; Насколько мне известно, UpdatePanels всегда обновляют, когда что-то внутри любой другой панели обновлений обновляется, поэтому, если ваша обратная передача кнопки, ваш элемент управления FileUpload также возвращает и теряет ссылку на файл.