【问题标题】:AjaxFileUpload postback event from a usercontrol ASP.NET来自用户控件 ASP.NET 的 AjaxFileUpload 回发事件
【发布时间】:2016-06-14 11:34:45
【问题描述】:

我在用户控件中有一个 AjaxFileUpload 控件,该控件在 Postback 上动态加载,这里的问题是,一旦文件上传 IsPostBack 为假,由于未加载用户控件,导致 OnUploadCompleteAll 事件不被触发。

我发现 AjaxFileUpload 控件有自己的回发属性AjaxFileUpload.IsInFileUploadPostBack,如何从我的 WebForm1.aspx 主页面访问该属性?

当从 AjaxFileUpload 触发事件时,我想在 WebForm1.aspx 的页面加载上检查 IsInFileUploadPostBack,然后加载用户控件。

这里是代码。

WebForm1.aspx

<form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
        <asp:Button ID="Button1" runat="server" Text="Load Control" OnClick="Button1_Click" />
        <asp:PlaceHolder ID="Placeholder1" runat="server" />

    </form>

代码隐藏

protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack)
                loadcontrol();
        }

        protected void Button1_Click(object sender, EventArgs e)
        {

        }

       private void loadcontrol()
        {
            this.Placeholder1.Controls.Clear();
            var _controls = LoadControl("~/WebUserControl1.ascx");
            this.Placeholder1.Controls.Add(_controls);
        }

WebUserControl1.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="AjaxFileUpload_Test.WebUserControl1" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %>

<div id="div1">

        <ajaxToolkit:AjaxFileUpload ID="AjaxFileUpload1" UseAbsoluteHandlerPath="false" OnUploadCompleteAll="AjaxFileUpload1_UploadCompleteAll" OnUploadStart="AjaxFileUpload1_UploadStart" runat="server" />
</div>

【问题讨论】:

  • 只有这么多的方式说“它不能像描述的那样工作”这部分是不可能的“IsInFileUploadPostBack on page load of WebForm1.aspx 然后加载用户控件。”您无法检查尚未加载的内容的属性。
  • 明白了...假设我想在加载控件后检查 loadcontrol() 中的属性,我该怎么做?
  • 没关系,我自己回答的,也找到了问题的原因

标签: c# asp.net user-controls ajaxcontroltoolkit


【解决方案1】:

您从代码隐藏加载用户控件是否有任何特定原因? ajax 控件不会创建实际的回发,这就是为什么它总是错误的。对于您似乎想要的内容,您应该使用非 ajax 文件上传。

【讨论】:

  • 我在主页上有很多选项,基于这些选项我加载了相应的用户控件。 AjaxFileUpload 控件有一个为回发设置的属性,我如何从我的主页访问该属性?
  • ajax 控件发布到隐藏框架,因此您永远不会触发正常的 IsPostBack 部分,这反过来又会阻止您在页面加载时正确加载控件,这就是您所看到的。因此,您将无法访问控件或 IsInFileUploadPostBack。您可以尝试做的是始终在页面上加载该控件,但将其隐藏,这样您始终可以确保控件已加载,但仅在需要时使用某些客户端 javascript 显示它,然后您应该能够检查 IsInFileUploadPostBack财产。
  • 另外我认为,如果您要动态加载控件,您需要在页面生命周期的早期执行它,以便正确获取视图状态信息,页面加载为时已晚(我相信,已经有一段时间了)。
  • 谢谢!一旦控件加载(甚至动态)我不能使用“FindControl”吗?不过,我似乎总是变得空虚。
  • 控件必须在页面生命周期的早期加载,它才能出现在 FindControl 正在查看的页面控件集合中。尝试在 Page_Init 中添加控件,而不是页面加载,然后它们应该正确获取视图状态(如果在上次回发之前加载)并正确显示在 FindControl 中。您通常应该在 init 中加载任何动态控件,而不是加载方法。
【解决方案2】:

搞定了!!

由于我只有加载控件才能访问AjaxFileUpload.IsInFileUploadPostBack 属性,所以我决定采用非正统的方法。

将以下代码添加到 Page_Init

//to load the controls if AsyncFileUpload causes a postback
//the URL should contain the ID of the control in its context query string
    if (Request.HttpMethod.Contains("POST") && Request.Url.AbsoluteUri.Contains("AjaxFileUpload1"))
          loadcontrol();

【讨论】:

    猜你喜欢
    • 2010-11-22
    • 2012-07-01
    • 2010-10-15
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多