#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
}
}