如何检查在Master Page中触发的控件

时间:2014-10-08 16:50:32

标签: asp.net master-pages

我们怎样才能找到在Master页面中触发的控件,该页面还有一个代码隐藏的面板? 我有以下布局。

Master Page
+---------Panel-----------+
| TextBox  Button1 Button2|
+-------------------------+
|
-------->Child Page
              +-------------------------+
              |        Get From Here!   |
              +-------------------------+

当我尝试以下操作时,targetId为空

if (IsPostBack)
{
    var targetID = Request.Form["__EVENTTARGET"];

    if (targetID != null && targetID != string.Empty)
    {
    var targetControl = this.Page.FindControl(targetID);
    }
}

我想知道哪个按钮会导致回发。

**** ****更新

我在没有成功的情况下尝试过以下链接。

Find on Page Init

1 个答案:

答案 0 :(得分:0)

您可以使用MasterPage提供的event与网页进行通信。

MasterPage内创建类似

的内容
public event EventHandler Button1ClickEvent;
public event EventHandler Button2ClickEvent;

这里发生的是您正在创建一个事件,MasterPage可以检查正在侦听的页面并向该页面发送事件以发出已被调用的信号。在这种情况下,EventHandler表示您将EventArgs传递给事件监听器。

你通过这样做发送一个事件

protected void Button1_Click(object sender, EventArgs e)
{
    if (Button1ClickEvent != null) // check if a sub page is implementing it
        Button1ClickEvent(this, EventArgs.Empty); // fire the event off
}

protected void Button2_Click(object sender, EventArgs e)
{
    if (Button2ClickEvent != null)
        Button2ClickEvent(this, EventArgs.Empty);
}

接下来,连接您的Page以实施这些活动

将此添加到您的页面定义

<%@ MasterType VirtualPath="~/MasterPage.master" %>

现在,您可以在页面代码隐藏

中访问这些事件
private void Master_Button1Click(object sender, EventArgs e)
{
    // This is called when the `Button1ClickEvent` is fired from your MasterPage
}

private void Master_Button2Click(object sender, EventArgs e)
{
    // This is called when the `Button2ClickEvent` is fired from your MasterPage
}

protected void OnInit(EventArgs e)
{
    // Setup an event handler for the buttons
    Master.Button1ClickEvent += new EventHandler(Master_Button1Click);
    Master.Button2ClickEvent += new EventHandler(Master_Button2Click);
}