none
在Page类模型中,最早可以在什么时候或什么事件中捕获到客户点击了一个Button服务器控件? RRS feed

  • 问题

  • 我知道可以在Page_Load(object sender, EventArgs e)中通过
    if(sender is Button)来判断是否是Button服务器控件引起了回发。

    但是,有没有其他的方法可以捕获到呢。或者依照以上的方法,我是否可以在更早的事件中捕获到呢?

    2009年6月16日 9:03

答案

  • 你好,如果,你想确认是否是Post回来的数据,你可以使用

    if (!Page.IsPostBack)
    {
        PopulateControls();
    }
    邹俊才
    2009年6月17日 1:43
    版主
  • 通过 IsPostBack 判断是否回发
    知识改变命运,奋斗成就人生!
    2009年6月17日 1:03
    版主
  • 谢谢楼上的邹俊才、X.X.Y

    本人问题已经解决了。
    并写了一个例子出来:

    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    
    public partial class TestPage04 : System.Web.UI.Page
    {
        protected Label lblTest;
        protected Button bt1;
        protected LinkButton lnk1;
    
        protected override void OnPreInit(EventArgs e)
        {
            lblTest = new Label();
            lblTest.ID = "lblTest";
    
            bt1 = new Button();
            bt1.ID = "bt1";
            bt1.Text = "测试";
            bt1.Click += new EventHandler(bt1_Click);
    
            pnlTest.Controls.Add(lblTest);
            pnlTest.Controls.Add(bt1);
    
            base.OnPreInit(e);
        }
    
        protected override void OnPreLoad(EventArgs e)
        {
            ViewState["isCreate"] = ViewState["isCreate"] ?? false;
            if (IsPostBack && (bool)ViewState["isCreate"])
            {
                CreatLinkButton();
            }
            base.OnPreLoad(e);
        }
    
        protected void lnk1_Click(object sender, EventArgs e)
        {
            lblTest.Text = "测试2完成。此结果为动态产生LinkButton并点击它后所得的结果。";
        }
    
        protected void bt1_Click(object sender, EventArgs e)
        {
            lblTest.Text = "测试1完成。此结果为直接点击Button按钮所得的结果。";
            CreatLinkButton();
        }
    
        protected void CreatLinkButton()
        {
            if (lnk1 == null)
            {
                lnk1 = new LinkButton();
                lnk1.Text = "测试";
                lnk1.Click += new EventHandler(lnk1_Click);
                pnlTest.Controls.Add(lnk1);
    
                ViewState["isCreate"] = true;
            }
        }
    
    }
    
    • 已标记为答案 giter999 2009年6月17日 3:33
    2009年6月17日 3:32

全部回复

  • 你好,我不是很明白你的描述,Page_Load(object sender, EventArgs e)中sender永远不会是button的,Click事件就能获取事件啊!
    邹俊才
    2009年6月16日 14:51
    版主
  • 你好,很抱歉我没有解释清楚

    我的目的是:假设页面中有3个Button,现在用户点击了其中的一个,我想在Page生命周期尽量早的阶段知道是哪一个Button被点击了。

    另外,我做过测试,sender是可以通过if (sender is Button)来判断是否是一个按钮引起了回发。
    2009年6月16日 22:37
  • 通过 IsPostBack 判断是否回发
    知识改变命运,奋斗成就人生!
    2009年6月17日 1:03
    版主
  • 你好,如果,你想确认是否是Post回来的数据,你可以使用

    if (!Page.IsPostBack)
    {
        PopulateControls();
    }
    邹俊才
    2009年6月17日 1:43
    版主
  • 谢谢楼上的邹俊才、X.X.Y

    本人问题已经解决了。
    并写了一个例子出来:

    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    
    public partial class TestPage04 : System.Web.UI.Page
    {
        protected Label lblTest;
        protected Button bt1;
        protected LinkButton lnk1;
    
        protected override void OnPreInit(EventArgs e)
        {
            lblTest = new Label();
            lblTest.ID = "lblTest";
    
            bt1 = new Button();
            bt1.ID = "bt1";
            bt1.Text = "测试";
            bt1.Click += new EventHandler(bt1_Click);
    
            pnlTest.Controls.Add(lblTest);
            pnlTest.Controls.Add(bt1);
    
            base.OnPreInit(e);
        }
    
        protected override void OnPreLoad(EventArgs e)
        {
            ViewState["isCreate"] = ViewState["isCreate"] ?? false;
            if (IsPostBack && (bool)ViewState["isCreate"])
            {
                CreatLinkButton();
            }
            base.OnPreLoad(e);
        }
    
        protected void lnk1_Click(object sender, EventArgs e)
        {
            lblTest.Text = "测试2完成。此结果为动态产生LinkButton并点击它后所得的结果。";
        }
    
        protected void bt1_Click(object sender, EventArgs e)
        {
            lblTest.Text = "测试1完成。此结果为直接点击Button按钮所得的结果。";
            CreatLinkButton();
        }
    
        protected void CreatLinkButton()
        {
            if (lnk1 == null)
            {
                lnk1 = new LinkButton();
                lnk1.Text = "测试";
                lnk1.Click += new EventHandler(lnk1_Click);
                pnlTest.Controls.Add(lnk1);
    
                ViewState["isCreate"] = true;
            }
        }
    
    }
    
    • 已标记为答案 giter999 2009年6月17日 3:33
    2009年6月17日 3:32