2011-04-16 50 views
6

Hay más que una pregunta y un artículo sobre la misma pregunta exacta, pero tengo un par de preguntas más relacionadas y esperaba obtener algunas respuestas.¿Cómo manejar el evento de botón de página maestra en la página de contenido?

  1. He oído hablar de dos enfoques para encontrar el botón y agregar el controlador o usar una interfaz (Compruebe ambos enfoques de here) .. ¿Cuál te sugiere?

  2. Si pudiera, por favor, ilustre la opción 'Interfaz' con algún código y dónde clasificar el archivo de interfaz porque no se puede leer en la página cuando intento heredarlo.

+0

¡Gracias por el útil enlace! – windowskm

Respuesta

7

Segundo acercamiento es IMO mejor. La primera opción combina una página con la página maestra específica, y no es agradable.

Todos los archivos se colocan en la misma carpeta.

IPageInterface.cs:

namespace CallFromMasterPage 
{ 
    public interface IPageInterface 
    { 
     void DoSomeAction(); 
    } 
} 

Default.aspx.cs:

namespace CallFromMasterPage 
{ 
    public partial class Default : System.Web.UI.Page, IPageInterface 
    { 
     public void DoSomeAction() 
     { 
      throw new NotImplementedException(); 
     } 
    } 
} 

Site.Master.cs:

namespace CallFromMasterPage 
{ 
    public partial class SiteMaster : System.Web.UI.MasterPage 
    { 
     protected void Button1_Click(object sender, EventArgs e) 
     { 
      IPageInterface pageInterface = Page as IPageInterface; 
      if (pageInterface != null) 
      { 
       pageInterface.DoSomeAction(); 
      } 
     } 
    } 
} 

hay otros enfoques. P.ej. puede publicar un evento a través del event broker.

+0

Ok eso es genial, pero tengo un problema ... ¿Cuál es el lugar correcto para poner el archivo de interfaz ... Estoy usando una arquitectura N-Tier PL, BLL, DAL? Estoy realmente atrapado en este detalle ya que mi código de página detrás del archivo no verá mi interfaz, incluso si la coloqué en la misma carpeta o incluso intenté agregar una carpeta App_Data. – lKashef

+0

¿Utiliza un proyecto de sitio web o de aplicación web? –

+0

Aplicación web – lKashef

0

ver en mi openion será mejor si se hace uso de controladores de eventos ... e incluso con el delegado de encargo ..

como esto

public delegate ReturnType MasterPageButtonHandler(CustomEventArgs ObjPriargs); 
public event MasterPageButtonHandler MasterPagebuttonClick; 
. 
. 
. 
. 
Button.click+=new EventHandler(Button1_Click); 
. 
. 
. 
protected void Button1_Click(Object sender,EventArgs e) 
{ 
    if(MasterPagebuttonClick!=null) 
    { 
     CustomEventArgs ObjPriargs=new CustomEventArgs(); 
     ObjPriargs.Property1=SomeValu1; 
     ObjPriargs.Property2=SomeValu2; 
     MasterPagebuttonClick.Invoke(ObjPriargs); 
    } 
} 
. 
. 
. 
public class CustomEventArgs 
{ 
     Public DataType Property1{get;set;} 
     Public DataType Property2{get;set;} 
     Public DataType Property3{get;set;} 
} 
. 
. 
. 
// Now in your aspx Page 
MyMaster m=Page.Master as MyMaster; 
m.MasterPagebuttonClick+=new MasterPageButtonHandler(MasterPageHandler_Click); 
. 
. 
. 
protected void MasterPageHandler_Click(CustomEventArgs ObjPriargs) 
{ 
    //You code///// 
} 

pasar por esta manera dar cierta flexibilidad como en el caso de que en el futuro desee pasar alguna página de contenido del recorrido de datos cuando se haga clic en ella, es muy posible.

+0

Realmente aprecio su concierto ... pero ¿está anunciando para su blog: S: D !!? – lKashef

Cuestiones relacionadas