Использование IPostBackEventHandler на главной странице

#c# #asp.net #vb.net #webforms #master-pages

#c# #asp.net #vb.net #веб-формы #мастер-страницы

Вопрос:

В прошлом я использовал IPostBackEventHandler на страницах для вызова RaisePostBackEvent в моем коде через javascript .

В настоящее время я работаю над проектом, который требует той же функциональности, но было бы довольно круто, если бы я мог поместить его в свой MasterPage , я пробовал аналогично, но мне не повезло, интересно, может ли кто-нибудь указать мне направление rite.

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, к сожалению, безуспешно.

Кто-нибудь может мне помочь, или я неосведомлен о том, что это невозможно достичь с помощью a MasterPage ?

С уважением

PS Я знаю, что могу это сделать (на моей тестовой странице) :

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

   myMaster.RaisePostBackEvent(eventArgument);
}
 

Это то, что я действительно не хочу делать на каждой странице, которая использует это MasterPage .

Кроме того, игнорируйте имена переменных, я только что придумал их для вопроса.

Ответ №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
    }
}