JDunkerley lo tiene todo. Pero permítame explicarle cómo desacoplarlo utilizando MVP para que pueda trabajar para evitar el problema del diseño del que habla Heiko Hatzfeld.
Básicamente, implemente el patrón MVP tanto para su control como para su página maestra. Consulte here para obtener instrucciones sobre cómo hacerlo. Declare el método que desea llamar en la interfaz del maestro (IMasterView). Luego crea una clase que controlará la relación entre los dos componentes; lo llamaremos la clase PageController. Coloque una instancia de esta clase en estado de solicitud para cada solicitud agregando la siguiente línea a global.asax.cs:
/* global.asax.cs */
protected void Application_BeginRequest(object sender, EventArgs e)
{
// ...
HttpContext.Current.Items["Controller"] = new PageController();
// ...
}
entonces Puede acceder a este ejemplo de cada uno de los presentadores (master y de control) a través de la siguiente línea de código:
var controller = HttpContext.Current.Items["Controller"] as PageController;
A continuación, puede aplicar un evento o algún otro mecanismo para Permitir que el control invoque el método en el maestro de una manera desacoplada a través de este objeto compartido. Por ejemplo:
/* PageController.cs */
public event EventHandler SomeEvent;
protected virtual void OnSomeEvent(EventArgs e)
{
Debug.Assert(null != e);
var handler = this.SomeEvent;
if (null != handler)
handler(this, e);
}
public void FireSomeEvent()
{
this.OnSomeEvent(EventArgs.Empty);
}
/* ControlPresenter.cs */
public ControlPresenter(IControlView view)
: base()
{
view.EventFired += (sender, e) =>
{
var controller = HttpContext.Current.Items["Controller"] as PageController;
controller.FireSomeEvent();
};
}
/* MasterPresenter.cs */
public MasterPresenter (IMasterView view)
: base()
{
var controller = HttpContext.Current.Items["Controller"] as PageController;
controller.SomeEvent += (sender, e) => view.MyFunction();
}
Asegúrese de que el evento "EventFired" se declara en la interfaz de su control (IControlView) e implementada en el control. Luego, todo lo que tiene que hacer para afectar al maestro (llame a su método), desencadena este evento y MVP + el PageContoller se encargará del resto.
Saludos
¡Utilicé este enfoque y funcionó bien! Gracias –
¡Me alegro de ser de ayuda! Feliz codificación :-) –