2011-02-18 21 views
10

¿Recomiendas desde cada sitio web creado en Visual Studio, que debe crear una página Base que sirva como clase padre?Una página base en ASP.NET

¿Cuáles son los beneficios/inconvenientes exactos?

+0

¡Hora de aceptar algunas respuestas! – ScottE

+0

No creo que haya dado una respuesta todavía. – TeaDrinkingGeek

Respuesta

10

Si desea anular la forma en que algo en ASP.NET funciona, puede ser más eficiente construirlo en una clase base en lugar de incluir el código en cada página. Dos casos específicos en los que he hecho esto son:

IsPostBack
hecho poco conocido: es bastante factible para elaborar una solicitud que, a ASP.NET, se parece a una devolución de datos, pero se presenta con una petición GET . Quien hace esto? Hackers, eso es quién. Una llamada a IsPostback en este caso devolverá true, pero realmente debería devolver false. Para evitar esto, construir una clase base que anula IsPostBack:

Public Class MyBase 
    Inherits System.Web.UI.Page 
    <DebuggerStepThrough()> _ 
    Public Shadows Function IsPostback() As Boolean 

     'Check the built-in IsPostback and make sure this is a HTTP POST 
     Return (Page.IsPostBack AndAlso Request.HttpMethod.ToUpper = "POST") 

    End Function 

End Class 

Manejo de errores
En Beginning ASP.NET Security, Blowdart habla sobre el hecho de que si se utiliza el error de ASP.NET manipulación para redirigir al cliente a una costumbre página de error, los hackers (nuevamente) pueden detectar la redirección y marcarla como un error que puede ser explotable. Un patrón más seguro es manejar el evento Error de la página y hacer un Server.Transfer (que no envía nada al cliente). De nuevo, hacer esto en una clase base significa que solo escribe el código una vez:

public partial MyBase : System.Web.UI.Page 
{ 
    protected void Page_Error (object sender, EventArgs e) 
    { 
     Exception ex = Server.GetLastError(); 

     // Do something with the exception e.g. log it 
     ... 

     Server.Transfer("~/mycustomerrorpage.aspx"); 
    } 
} 
+1

Sé que esta es una publicación anterior, pero para las personas que podrían referirse a esta respuesta en el futuro, será mejor que agregue esto. No pondría el manejo de errores en el controlador de eventos Page_Error de la clase base de la página. Lo pondría en el controlador de eventos global.asax Application_Error. De esta forma, cualquier error es capturado y manejado de forma segura independientemente de si la página utiliza su clase base o no. – AgapwIesu

1

Echa un vistazo a las páginas maestras, este es su objetivo principal.

Aquí hay un enlace: http://msdn.microsoft.com/en-us/library/wtxbf3hh.aspx

Esto servirá como plantilla para su sitio. Agregaría una sección de contenido que conformaría el cuerpo de su sitio. Puede hacer referencia a la página maestra de sus páginas secundarias para tener un diseño, menú, etc. consistente para su sitio.

También, como los otros han notado. Si está ejecutando un código común, simplemente cree una clase, refiérase desde donde lo necesite.

+0

Sé lo que hacen las páginas maestras. Estoy hablando de una página Base, que puede ubicarse entre una Clase Web y una página web. – TeaDrinkingGeek

0

Si necesita una funcionalidad común en todas sus páginas que pertenece a la clase de página, cree una clase base común.

Si no necesita una funcionalidad tan común en todas sus páginas, no cree una clase base común.

Si usted no puede decidir, tener una clase base no va a hacer daño a nadie, por lo que también podría tener una (yo diría que más a menudo terminan necesitando algunas funciones comunes de lo que no)

4

Sí, lo hago.

Pero recuerde que el propósito de una página base de es totalmente diferente a los fines de una página maestra .

Déjame explicarte.

páginas maestras

son elementos de diseño utilizados para compartir las mismas características gráficas y parte del comportamiento de formularios web (pensar en una caja de conexión/desconexión con el código subyacente) en todas las páginas que se asocian con el maestro. Sus clases de página finales serán incluir una referencia a la página maestra por lo que el resultado final aparecerá como la página maestra incluyendo su página (comprobar el código fuente para decirle que contiene quién)

páginas Base

son (¿abstracto? al menos no sellado!) clases de las cuales todas sus páginas heredan de la vista de código subyacente. A menos que explícitamente y programáticamente agreguen controles a la página de basae, es decir. en el constructor a través del método LoadControl, todas las páginas se verán en blanco desde el principio hasta que agregue el código.

Pero a menudo son útiles. Si desea anular algunos de los métodos de la clase base, puede tener el comportamiento sobrescrito compartido en todas las páginas. O bien, es posible que desee exponer objetos específicos de la aplicación a las páginas secundarias (una referencia a una capa de acceso a datos, un registrador o lo que sea). Un ejemplo es la anulación de la propiedad UICulture para recuperar el idioma preferido por el usuario de las cookies.

Ambos pueden combinarse

Dependiendo de sus objetivos, es posible combinar páginas maestras con las páginas de base.

sugiero siempre crear una clase de página base, ya que si los requisitos de su aplicación cambian con el tiempo y ya creó muchas páginas, puede intentar modificar la clase base para que las modificaciones se propaguen a todas las páginas, de acuerdo con el nivel de complejidad de ellos.

+1

¿Quién dijo algo acerca de las páginas maestras? – Lazarus

+2

Matt respondió sobre las páginas maestras. Mi respuesta completa la otra –

1

Depende del tamaño y la complejidad de su proyecto. Para sitios web pequeños con funcionalidad mínima, una página base puede ser excesiva. Dicho esto, normalmente lo usaría para la funcionalidad de todo el sitio, como la seguridad. Tiendo a mantener la funcionalidad en las páginas maestras al mínimo ya que su objetivo principal es organizar su diseño y factorizar las áreas comunes de visualización de sus páginas de contenido para evitar la duplicación y facilitar el mantenimiento.

Para crear una página de base para su uso en un escenario página maestra, se puede utilizar la siguiente sintaxis:

página maestra:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="MyProject.master.cs" 
     Inherits="MyProject.MasterPages.MyProject" %> 

    <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> 
    </asp:ContentPlaceHolder> 

Base Página:

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPages/MyProject.Master" 
    AutoEventWireup="true" CodeBehind="BasePage.aspx.cs" 
     Inherits="MyProject.BasePage" %> 

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" 
    runat="server"> 
</asp:Content> 

Página de contenido:

<%@ Page Title="MyProject - Home" Language="C#" 
    MasterPageFile="~/MasterPages/MyProject.Master" AutoEventWireup="true" 
     CodeFileBaseClass="MyProject.BasePage" CodeFile="Default.aspx.cs" 
      Inherits="MyProject.Default" 
       Meta_Description="Code Snippet: Master Page and Base Page" 
        Meta_Keywords="master, base, content" Theme="Style" %> 

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" 
    runat="server"> 
</asp:Content> 
Cuestiones relacionadas