在主页面上使用IPostBackEventHandler

时间:2011-10-24 15:17:02

标签: c# asp.net vb.net webforms master-pages

我过去在页面上使用IPostBackEventHandler通过RaisePostBackEvent在我的代码中调用javascript

我目前正在开发一个需要相同功能的项目,但是如果我能把它放在我的MasterPage中会非常酷,我尝试的方式相同,但我没有运气,我想知道是否有人能指出我的仪式方向。

MasterPage声明:

public partial class Master_Pages_MainMasterPage : System.Web.UI.MasterPage, IPostBackEventHandler
{
   public void RaisePostBackEvent(string eventArgument)
    {
       // do stuff
    }
}

我的Javascript:

function myFunction{
  var pageId = '<%= Page.ClientID %>';

  __doPostBack(pageId, 'savePageContent');
}

我的测试页:

public partial class TestPage : System.Web.UI.Page
{

}

我也试过将IPostBackEventHandler添加到TestPage,遗憾的是没有运气。

任何人都可以帮助我,或者我对使用MasterPage无法实现的事实一无所知?

此致

P.S。我知道我可以这样做(在我的TestPage中):

public void RaisePostBackEvent(string eventArgument)
{
   Master_Pages_MainMasterPage myMaster = (Master_Pages_MainMasterPage)this.Master;

   myMaster.RaisePostBackEvent(eventArgument);
}

对于使用MasterPage的每一页,我真的不想做这件事。

另外,忽略变量命名,我刚刚提出了这个问题。

1 个答案:

答案 0 :(得分:1)

老实说,我认为在您的母版页中实现IPostBackEventHandler界面并不是一个好主意,因为RaisePostBackEvent几乎总是特定于页面,与控件或事件有关。页。

默认情况下,

System.Web.UI.Page已经实现了IPostBackEventHandler接口,因此您无需在每个页面上实现它 - 它已经存在。

您可以在页面上覆盖RaisePostBackEvent方法,如下所示:

protected override void RaisePostBackEvent(IPostBackEventHandler source, string eventArgument)
{
    //call the RaisePostBack event 
    base.RaisePostBackEvent(source, eventArgument);

    if (source == SomeControl)
    {
        //do something
    }
}