Подтвердить что ты не робот

FileUpload.hasFile всегда False

У меня есть элемент управления FileUpload (и он не внутри UpdatePanel), а его свойство hasFile всегда False.

   <asp:FileUpload ID="certificateUploader" runat="server"/>

Любая мысль?

4b9b3361

Ответ 1

Добавьте триггер для вашей панели обновления

<Triggers>
   <asp:PostBackTrigger ControlID="btnCertificateUpload" />
</Triggers>

Это вызовет обратную передачу при нажатии кнопки загрузки.

Также добавьте строку ниже в Page_Load

Page.Form.Attributes.Add("enctype", "multipart/form-data");

Ответ 2

Вы не можете загружать файлы с помощью AJAX = > вы не должны размещать элемент управления FileUpload внутри UpdatePanel, потому что эта UpdatePanel отправляет на сервер запрос AJAX.

Ответ 3

Я также загрузил файл, используя элемент управления FileUpload, но свойство HasFile вернул false. Оказывается, что FileUpload.HasFile также ложно, если вы загружаете пустой файл. В этом случае при добавлении текста в файл, который вы хотите загрузить, свойство Has file вернет true.

Ответ 4

В дополнение к примеру, предоставленному службой @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);
        }
    }

Ответ 5

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

Большое спасибо за вашу помощь и сообщения.

Ответ 6

Иногда 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 (сервер)

Ответ 7

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