FileUpload.HasFile всегда null - PullRequest
       14

FileUpload.HasFile всегда null

1 голос
/ 12 марта 2012

Мне интересно, почему мой метод FileUpload.HasFile всегда равен нулю ..

Это Xaml, который я использую.

<asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanelAddFiles" runat="server" UpdateMode=Conditional>
        <Triggers>
           <asp:AsyncPostBackTrigger ControlID="LkUpload" />
        </Triggers>
        <ContentTemplate>
        </ContentTemplate>
    </asp:UpdatePanel>
    <asp:Panel ID="PanelAddFiles" runat="server">
        <div class="PanelAddFiles">
            <asp:LinkButton ID="LkUpload" runat="server" OnClick="LkUpload_Click" Visible="false">Upload</asp:LinkButton>
            <asp:FileUpload ID="FileUpload1" runat="server" Visible="false" />
        </div>
    </asp:Panel>

Редактировать:

Я думаю, что одной из проблем будет это

    <form action="Upload/Default.aspx" enctype="multipart/form-data" method="post" id="frm">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanelAddFiles" runat="server" UpdateMode=Conditional>
        <Triggers>
           <asp:AsyncPostBackTrigger ControlID="LkUpload" />
        </Triggers>
        <ContentTemplate>
        </ContentTemplate>
    </asp:UpdatePanel>
    <asp:Panel ID="PanelAddFiles" runat="server">
        <div class="PanelAddFiles">
            <asp:LinkButton ID="LkUpload" runat="server" OnClick="LkUpload_Click" Visible="false">Upload</asp:LinkButton>
            <!--<asp:FileUpload ID="FileUpload1" runat="server" Visible="false" />-->
            <ajaxToolkit:AsyncFileUpload runat="server" ID="FileUpload1" />
            <asp:Panel ID="Dropbox" runat="server">
                <div class="dropbox">
                    <div class="dragzone">
                    </div>
                    <span class="message">
                drop files here to upload
            </asp:Panel>
        </div>
    </asp:Panel>
    </form>
</div>

потому что здесь есть форма страницы, а также форма, которую я здесь использую. У меня есть Dropbox, который я показываю или нет, если это IE или нет. Поэтому, когда это IE, я просто отображаю файл загрузки. Может быть, потому что есть две формы, которые больше не стреляют?

Должен ли я определенно использовать этот AjaxToolkit?

Ответы [ 2 ]

6 голосов
/ 12 марта 2012

FileUpload не работает внутри UpdatePanel. Вы должны использовать AsyncFileUpload из набора инструментов управления ASPNET AJAX.


Когда вы используете AsyncFileUpload, вы должны установить правильные параметры в теге form , который находится на вашей странице или главной странице:

<form id="form1" runat="server" enctype="multipart/form-data" method="post">

Если вы не установите правильный enctype и метод UploadedComplete никогда не будет запускать , и вы не сможете получить FileUpload.FileBytes , начиная с FileUpload.HasFile возвращает true только во время выполнения UploadedComplete.


Кроме того, предыдущие версии AsyncFileUpload не работали в Chrome. Актуальная версия решила проблему.

3 голосов
/ 12 марта 2012

Используйте следующий код:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="futest.aspx.cs" Inherits="erpweb.futest" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:ScriptManager ID="smTest" runat="server"></asp:ScriptManager>
    <asp:UpdatePanel ID="upTest" runat="server">
        <ContentTemplate>
            <ajaxToolkit:AsyncFileUpload ID="AsyncFileUpload1" runat="server" 
                onuploadedcomplete="AsyncFileUpload1_UploadedComplete" />
        </ContentTemplate>
    </asp:UpdatePanel>

    </div>
    </form>
</body>
</html>

Код:

protected void AsyncFileUpload1_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
    {
        if (AsyncFileUpload1.HasFile)
        {
            //do save process here
        }
    }
...