繁体   English   中英

asp.net:AjaxFileUpload OnUploadComplete事件

[英]asp.net : AjaxFileUpload OnUploadComplete event

我正在使用Visual Studio 2013和AjaxControlToolkit v15.0开发简单的拖放多个文件上传器。 我有AjaxFileUpload控件,但是我注意到在浏览器中只有一个文件显示为已上传

另外,我看到OnUploadComplete事件不会触发。 我通过在事件中插入警报来测试事件,该事件不会运行,并且上传的文件也不会显示在项目或数据库表中。

这是我的代码:

.aspx文件

<form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <div  align="center">
        <asp:AjaxFileUpload ID="AjaxFileUpload1" runat="server"  MaximumNumberOfFiles="10" OnUploadComplete="File_Upload" Width="500px" Mode="Auto" />
    </div>
</form>

.aspx.cs文件

protected void File_Upload(object sender, AjaxFileUploadEventArgs e)
{
    SqlConnection con = new SqlConnection(abc);
    try {
        string filename = Path.GetFileName(e.FileName);
        string strDestPath = Server.MapPath("~/Documents/");

        SqlCommand cmd = new SqlCommand("INSERT INTO upload (name, path) VALUES(@FileName, @FilePath)");

        cmd.Parameters.AddWithValue("@FileName", filename);
        cmd.Parameters.AddWithValue("@FilePath", "Documents/" + filename);

        con.Open();

        cmd.ExecuteNonQuery();
        con.Close();

        //Save file to project
        AjaxFileUpload1.SaveAs(@strDestPath + filename);
    }
    catch (Exception er) 
    { 
        Response.Write("<script language='javascript'> alert(' problem');</script>");   
    }
    finally { con.Close(); }     
}

web.config中

<system.web>
    <compilation debug="true" targetFramework="4.5">
        <assemblies>
            <add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
            <add assembly="System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </assemblies>
    </compilation>
    <httpHandlers>
        <add verb="*" path="AjaxFileUploadHandler.axd" type="AjaxControlToolkit.AjaxFileUploadHandler, AjaxControlToolkit"/>
    </httpHandlers>
    <httpRuntime targetFramework="4.5"/>
</system.web>

<system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <handlers>
        <add name="AjaxFileUploadHandler" verb="*" path="AjaxFileUploadHandler.axd" type="AjaxControlToolkit.AjaxFileUploadHandler, AjaxControlToolkit"/>
    </handlers>
</system.webServer>

有什么办法吗?

我的变通方法:我在所有AjaxFileUpload控件上创建了一个名为“ data-upload-type”的数据属性,并将其设置为类型的名称(用于了解如何处理文件的上载类型)。 然后,我设置客户端调用以获取该值,并设置具有相同值的cookie。 Cookie是在服务器端函数上接收的,我根据接收到的值进行分支。

这是一个示例:这是我常见的客户端开始上传: function StartUpload(sender, args) { var t = $(sender._element).attr('data-upload-type'); document.cookie = 'upload-type=' + $(sender._element).attr('data-upload-type') + ';'; } function StartUpload(sender, args) { var t = $(sender._element).attr('data-upload-type'); document.cookie = 'upload-type=' + $(sender._element).attr('data-upload-type') + ';'; } function StartUpload(sender, args) { var t = $(sender._element).attr('data-upload-type'); document.cookie = 'upload-type=' + $(sender._element).attr('data-upload-type') + ';'; }我的页面代码删除了一个ajaxcontrols: <asp:AjaxFileUpload ID="afuUploader1" runat="server" OnClientUploadStart="StartUpload" OnUploadComplete="UploadComplete" OnClientUploadComplete="UploadComplete" data-upload-type="UploadType2" / >

然后,在您的服务器端上传调用中,只需检查Response.Cookies(“ upload-type”)。 奇迹般有效!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM