AjaxUploadControl不会触发onuploadcomplete方法

时间:2012-11-19 16:07:09

标签: c# asp.net ajax file-upload ajaxcontroltoolkit

我正在尝试在我的网站上实现AjaxUploadControl功能,但它不会触发OnUploadComplete方法。相反,它只是说文件上传100%,但文件不在指定的文件夹中。我在OnUploadComplete方法中设置了断点,并且能够确定永远不会到达此方法。当“取消”按钮显示时,它几乎似乎跳入无限循环,但是一旦尝试上传文件,屏幕上的所有按钮都不会被点击。

.aspx页面:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="AjaxTest.aspx.cs" Inherits="AjaxTest" %>

<!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">
        <ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
        </ajaxToolkit:ToolkitScriptManager>
    <div>
            <ajaxToolkit:AjaxFileUpload ID="ajaxUpload1" runat="server" OnUploadComplete="ajaxUpload1_OnUploadComplete" />
    </div>
    </form>
</body>
</html>

代码隐藏文件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class AjaxTest : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void ajaxUpload1_OnUploadComplete(object sender,   AjaxControlToolkit.AjaxFileUploadEventArgs e)
    {
        string filePath = "~/SiteImages/" + e.FileName;
        ajaxUpload1.SaveAs(MapPath(filePath));
    }
}

非常感谢帮助!

5 个答案:

答案 0 :(得分:1)

该属性为OnClientUploadComplete,而非OnUploadComplete

请参阅this

  

活动

     

UploadedComplete - 在上传文件时在服务器上引发   成功。在这种情况下,AjaxFileUploadEventArgs的一个实例是   传递包含文件名,大小和内容类型的参数。

答案 1 :(得分:1)

如果你没有设置正确的enctype和方法,UploadedComplete永远不会触发。 尝试在表单标记中添加 enctype =“multipart / form-data” enter image description here e.g。

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

代码背后:

protected void AjaxFileUpload1_UploadComplete(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e)
{
    string filePath = "~/SiteImages/";
    AjaxFileUpload1.SaveAs(MapPath(filePath + System.IO.Path.GetFileName(e.FileName)));
}

代码内联:

<form id="form1" runat="server" enctype="multipart/form-data" method="post">
      <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <div>
        <asp:AjaxFileUpload ID="AjaxFileUpload1" runat="server" 
            onuploadcomplete="AjaxFileUpload1_UploadComplete" />   
    </div>
    </form>

希望它有所帮助。

答案 2 :(得分:1)

您遇到的实际问题是您需要在web.config中使用HTTP处理程序

<httpHandlers>
    <add verb="*" path="AjaxFileUploadHandler.axd"
      type="AjaxControlToolkit.AjaxFileUploadHandler, 
      AjaxControlToolkit"/>
</httpHandlers>

我遇到了同样的问题(上传时出现红色错误,.cs文件中的事件根本没有触发),现在通过将其添加到我的web.config来解决

答案 3 :(得分:0)

我发现了我遇到的问题。我试图在网站和网络应用程序中实现功能。我创建了一个测试Web应用程序平台,它运行完美。我是AJAX的初学者,并没有意识到这会导致问题,但是,有没有人知道一个解决方案,以使这个功能在网站上工作。我担心此时很容易移植到网络应用程序。

答案 4 :(得分:0)

请遵循以下规则(.NET 4.0)或(.NET 4.5 FRAMEWORKS) 确认以下步骤已在您的项目中使用

  1. HTML PAGE(必须是这样)

    <body>
    <form id="form1" runat="server" enctype="multipart/form-data" method="post">
    <div>
        <ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"></ajaxToolkit:ToolkitScriptManager>
        <ajaxToolkit:AjaxFileUpload ID="AjaxFileUpload1" runat="server" OnUploadComplete="AjaxFileUpload1_UploadComplete" ClientIDMode="Static" ContextKeys="dd" MaximumNumberOfFiles="4" />
    </div>
    </form>
    

  2. 重要的WEB.Config应该是(具有以下标记 for .net 4.5

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

  3. 重要的WEB.Config应该是(小于4或4.5 的标签如下)

  4. <httpHandlers> <add verb="*" path="AjaxFileUploadHandler.axd" type="AjaxControlToolkit.AjaxFileUploadHandler, AjaxControlToolkit"/> </httpHandlers>