【问题标题】:AjaxUploadControl does not fire onuploadcomplete methodAjaxUploadControl 不会触发 onuploadcomplete 方法
【发布时间】:2012-11-07 14:26:07
【问题描述】:

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

非常感谢您的帮助!

【问题讨论】:

  • 如果你没有设置正确的 enctype 和方法 UploadedComplete 将永远不会触发。
  • 尝试将 enctype="multipart/form-data" 添加到您的表单标签中。
  • 我将您建议的内容添加到我的表单选项卡中,现在它看起来像这样 "
    ",但我仍然遇到同样的问题。
  • 不,如果你使用ajax控制工具包,你不必这样做。
  • 您在Page_Load 中有一些依赖于IsPostBack 属性的逻辑吗?查询字符串中有参数吗?

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


【解决方案1】:

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

&lt;form id="form1" runat="server" enctype="multipart/form-data" method="post"&gt;

背后的代码:

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>

希望对你有帮助。

【讨论】:

  • 我还添加了method="post",但仍然没有运气。
  • 您使用的是哪个版本的 Ajax 控件工具包?
  • 试试这个 OnClientUploadComplete="ajaxUpload1_OnUploadComplete"
  • 我需要做这个服务器端,而且当我改变它时,它会使所有按钮都消失。
  • 我建议下载最新版本的 Ajax 控制工具包并添加到您的项目中,因为我刚刚使用新版本进行了测试,它确实会触发事件并命中断点。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    该属性是OnClientUploadComplete,而不是OnUploadComplete

    请参阅this

    活动

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

    【讨论】:

    • 我不想执行客户端 java 脚本。我正在尝试在代码隐藏中做服务器端。
    • 如果是这种情况,请查看我的编辑。你使用的事件是错误的。
    • 智能感知不包含 UploadedComplete 的条目?
    • 我已经看到了,我已经尝试将它插入我的代码中。该站点stephenwalther.com/archive/2012/05/01/… 和其他几个站点以我的方式引用它。我会再次尝试 UploadedComplete 并通知您。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      请遵守以下规则 (.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 应该是(具有以下标记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 有以下标记)

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-06
        • 1970-01-01
        • 1970-01-01
        • 2011-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        相关资源
        最近更新 更多