2

我正在尝试在我的网站上实现 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));
    }
}

非常感谢您的帮助!

4

5 回答 5

1

属性是OnClientUploadComplete,不是OnUploadComplete

参考这个

活动

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

于 2012-11-19T16:15:14.757 回答
1

如果您没有设置正确的 enctype 和方法 UploadedComplete 将永远不会触发。 尝试将enctype="multipart/form-data"添加到您的表单标签中。 在此处输入图像描述 例如

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

希望能帮助到你。

于 2012-11-19T16:15:26.963 回答
1

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

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

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

于 2014-02-19T15:45:11.543 回答
0

我发现了我遇到的问题。我试图在网站而不是网络应用程序中实现该功能。我创建了一个测试网络应用程序平台,它运行完美。我是 AJAX 的初学者,并没有意识到这会导致问题,但是,有没有人知道让这个功能在网站上工作的解决方案。恐怕此时有太多内容无法轻松移植到 Web 应用程序。

于 2012-11-19T22:19:54.813 回答
0

请遵循以下规则 (.NET 4.0) 或 (.NET 4.5 框架) 确保在您的项目中使用了以下步骤

  1. HTML 页面(必须是这样的)

    <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 应该是(具有以下.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的以下标签)

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

于 2014-09-20T08:06:01.830 回答