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

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>
4b9b3361

Ответ 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 до того, как сообщение будет выполнено, но я сомневаюсь в этом.