将EventHandler添加到内容页面

时间:2011-10-26 17:59:17

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

我已在Button Master Page上对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(在localhost下运行)时,Page_Load事件就会触发!

我做错了什么?

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

2 个答案:

答案 0 :(得分:2)

这里的问题是处理程序Button1_Click没有为你开火吗?

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

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

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

希望这有帮助。

答案 1 :(得分:1)

也许你想在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