Использование IPostBackEventHandler на главной странице - PullRequest
0 голосов
/ 24 октября 2011

Я использовал 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 Ответ

1 голос
/ 24 октября 2011

Честно говоря, я не думаю, что было бы очень хорошей идеей реализовать интерфейс 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
    }
}
...