【问题标题】:Add EventHandler to Content Page将 EventHandler 添加到内容页面
【发布时间】:2011-10-26 17:59:17
【问题描述】:

我已将Master Page 上的Button 控件连接到Content Page 中,如下所示:

SiteMaster MasterPage;

protected void Page_Load(object sender, EventArgs e) 
{
   if (!Page.IsPostBack) 
   {
      MasterPage = (SiteMaster)Page.Master;
      MasterPage.Button1.Click += new EventHandler(Button1_Click);
   }
}

void Button1_Click(object sender, EventArgs e) 
{
   MasterPage.Button1_Click(sender, e);
}

然而,每当我点击页面上的Button1(在本地主机下运行)时,Page_Load 事件就会触发!

我做错了什么?

如果有帮助,MasterPage.Button1_Click 事件会运行一个登录脚本,因此不应该有递归调用。

【问题讨论】:

    标签: c# asp.net visual-studio-2010 master-pages


    【解决方案1】:

    这里的问题是处理程序Button1_Click 没有为您触发吗?

    如果是这样,这是因为您只是在初始页面加载时为 Click 事件分配事件处理程序,而不是在页面回发时。

    尝试在初始加载和后续回发时分配事件处理程序,如下所示:

    protected void Page_Load(object sender, EventArgs e)
    {
        MasterPage = (SiteMaster)Page.Master;
        MasterPage.Button1.Click += new EventHandler(Button1_Click);
    }
    

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      也许您想在 Page_Init 而不是 Page_Load 中连接您的事件。

      只要您的按钮单击导致 Page_Load 触发。 Page_Load 总是会被触发,因为它是页面生命周期的一部分。

      有关页面生命周期的详细信息,请参阅:http://support.microsoft.com/kb/305141。

      Page_Init:在此事件期间,您可以初始化值或连接您可能拥有的任何事件处理程序。

      另见问题:In asp.net, page_load occuring before radio button OnCheckedChanged event

      【讨论】:

      • 好的,那么Page_Init 是在哪里定义的?我需要写一个吗?
      • 你只需要将它添加到你的页面代码后面。它的定义与 Page_Load 完全相同。
      猜你喜欢
      • 1970-01-01
      • 2012-05-09
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      • 2019-04-09
      • 2011-09-27
      • 1970-01-01
      相关资源
      最近更新 更多