处理ContentPage上的MasterPage事件

时间:2009-07-02 14:36:09

标签: asp.net events

我的MasterPage上有一个按钮,我希望ContentPage处理按钮的Click事件。这是我到目前为止所做的:

//Event in MasterPage
public event EventHandler Search_Submit;

//ButtonClick event in MasterPage
protected void SearchButton_Click(object sender, EventArgs e)
    {
        if (Search_Submit != null)
        {               
            Search_Submit(this, EventArgs.Empty);
        }
    }


//EventHandler in Page_Init on ContentPage
Master.Search_Submit += new EventHandler(Master_Search_Submit);

//Search_Submit event in ContentPage
private void Master_Search_Submit(object sender, EventArgs e)
    {
        //Perform appropriate action...
    }

这一切都有效 - 但是,我想用EventArgs传递一个值。我相信我需要创建一个自定义EventArgs类,它继承自EventArgs并具有我的自定义属性。但是,当我这样做时,我收到以下错误:'Master_Search_Submit'没有重载匹配委托'System.EventHandler'。

3 个答案:

答案 0 :(得分:2)

您已定义事件以使用EventHandler委托。委托是指向函数的指针,它定义响应方法必须具有的签名。 EventHandler委托的签名是:

delegate void EventHandler(object sender, EventArgs e);

在.NET 2.0中,有一个通用的EventHandler委托,允许您指定要使用的EventArgs类型。

public event EventHandler<MyEventArgs> Search_Submit;

现在您可以使用带有签名

的事件处理程序
void EventArgs<TArgs>(object sender, TArgs e) where TArgs: EventArgs

在你的情况下,这将是:

void Master_Search_Submit(object sender, MyEventArgs e)

答案 1 :(得分:1)

您必须将您的参数作为EventArgs传递,并将其强制转换为您的处理程序:

private void Master_Search_Submit(object sender, EventArgs e)
{

    MyEventArgs mea = (MyEventArgs)e;
    //Perform appropriate action...
}

或者您必须定义一个需要自定义事件args类的委托:

 public delegate void MyEventHandler(object sender, MyEventArgs mae);
 public event MyEvent myEvent

 myEvent += new MyEventHandler(Master_Search_Submit);

答案 2 :(得分:0)

您可以使用CommandEventHandler而不是EventHandler委托。