none
怎么样克服动态加载控件导致的AJAX失效,附代码 RRS feed

  • 问题

  • 页面代码如下:

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default"%>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title>Untitled Page</title>
    </head>
    <body>
      <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
      <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
          <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        </ContentTemplate>
      </asp:UpdatePanel>
      </form>
    </body>
    </html>

    以下是CS文件中的代码:

    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    
    public partial class _Default : System.Web.UI.Page 
    {
      protected void Page_Load(object sender, EventArgs e)
      {
        if (!IsPostBack)
        {
          LinkButton lb = new LinkButton();
          lb.Click += new EventHandler(lb_Click);
          lb.Text = "Ajax测试!";
          lb.Style.Add("color", "red");
          this.UpdatePanel1.ContentTemplateContainer.Controls.Add(lb);
        }
      }
    
      void lb_Click(object sender, EventArgs e)
      {
        Label1.Text="测试成功!";
      }
    }

    在这样的情况下,当我点击LINKBUTTON的时候,页面按普通的POST请求提交了,如果是直接拖进来放在页面的按钮没事

    怎么样克服,麻烦也说一下解决的原理,谢谢!

    2010年6月17日 16:59

答案

  • 你好,

    我测试了下,把你上面的代码稍微修改下即是异步提交了。

     LinkButton lb = new LinkButton();
          lb.ID = "lbTest";
          lb.Click += new EventHandler(lb_Click);
          lb.Text = "Ajax测试!";
          lb.Style.Add("color", "red");
          this.UpdatePanel1.ContentTemplateContainer.Controls.Add(lb);

    增加一个id,否则没有id不知道是谁触发的了。

    但是这样做它的事件仍不会触发,因为asp.net生命周期中是先page_load,然后再执行它的click事件。

    而当第二次pageload时,该linkbutton不存在了,你只是在初次加载的时候添加了该button,如果在每次load的时候都加载该控件就可以了,即不要放在 if (!IsPostBack)内。


    Microsoft Online Community Support
    2010年6月21日 3:51

全部回复

  • 别沉,我真的很需要!!告诉我为什么页面上拖的按钮可以也行
    2010年6月18日 3:53
  • 开发vs工具方式创造者 只考虑了页面上放的控件创造背后ajax支持 在后台代码创造的话 你必须写完整代码
    77138191qq群 .net与asp.net
    2010年6月19日 10:44
  • 你好,

    我测试了下,把你上面的代码稍微修改下即是异步提交了。

     LinkButton lb = new LinkButton();
          lb.ID = "lbTest";
          lb.Click += new EventHandler(lb_Click);
          lb.Text = "Ajax测试!";
          lb.Style.Add("color", "red");
          this.UpdatePanel1.ContentTemplateContainer.Controls.Add(lb);

    增加一个id,否则没有id不知道是谁触发的了。

    但是这样做它的事件仍不会触发,因为asp.net生命周期中是先page_load,然后再执行它的click事件。

    而当第二次pageload时,该linkbutton不存在了,你只是在初次加载的时候添加了该button,如果在每次load的时候都加载该控件就可以了,即不要放在 if (!IsPostBack)内。


    Microsoft Online Community Support
    2010年6月21日 3:51