FileUpload.hasFile всегда False - PullRequest
       5

FileUpload.hasFile всегда False

35 голосов
/ 13 марта 2012

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

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

Есть мысли?

Ответы [ 7 ]

49 голосов
/ 08 мая 2012

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

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

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

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

Page.Form.Attributes.Add("enctype", "multipart/form-data");
13 голосов
/ 13 марта 2012

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

10 голосов
/ 08 мая 2015

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

7 голосов
/ 17 марта 2016

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

ваш код (c #)

    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);
        }
    }
3 голосов
/ 13 марта 2012

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

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

1 голос
/ 14 августа 2013

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

0 голосов
/ 22 января 2014

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...