Une page de Base en ASP.NET

à partir de chaque site web créé dans Visual Studio, recommandez-vous de créer une page de Base qui sert de classe mère?

Quelles sont les avantages/inconvénients?

10
demandé sur meagar 2011-02-18 16:11:55

5 réponses

si vous voulez outrepasser la façon dont quelque chose ASP.NET fonctionne, il peut être plus efficace de le construire dans une classe de base plutôt que d'inclure le code dans chaque page. Voici deux exemples précis où j'ai fait cela:

IsPostback

Fait peu connu: il est tout à fait faisable d'élaborer une demande que, pour ASP.NET, ressemble à un postback mais est soumis avec une requête GET. Qui est-ce? Les pirates, qui est qui. Un appel à IsPostback dans ce cas retournera true, mais il devrait vraiment revenir false. Pour contourner cela, construisez une classe de base qui remplace 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

Gestion Des Erreurs

début ASP.NET sécurité,Blowdart parle du fait que si vous utilisez ASP.NET pour rediriger le client vers une page d'erreur personnalisée, les hackers (à nouveau) peuvent détecter la redirection et la signaler comme une erreur pouvant être exploitable. Un modèle plus sûr est de gérer l'événement D'erreur de la Page et faire un serveur.Transfert (qui n'envoie rien au client). Encore une fois, faire cela dans une classe de base signifie que vous n'écrivez le code qu'une seule fois:

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");
     }
}
10
répondu PhilPursglove 2017-05-23 12:24:58

Oui, je le fais.

Mais s'il vous plaît rappelez-vous que le but d'un page de base est totalement différent du but d'un page.

Laissez-moi vous expliquer.

maquettes

les éléments de mise en page sont-ils utilisés pour partager les mêmes caractéristiques graphiques et une partie du comportement des formulaires Web (pensez à une boîte de connexion/déconnexion avec le code-derrière) à travers toutes les pages qui sont associées au maître. Vos cours de la page finale include une référence à la page principale pour que le résultat final apparaisse comme la page principale de votre page (vérifier le code source à dire qui contient des qui)

pages de Base

sont (résumé? au moins n'a pas scellé!) classes dont toutes vos pages héritent de la vue code-behind. Sauf si vous avez explicitement et par programmation ajouter des commandes à la page basae, c.-à-d.: dans le constructeur via LoadControl méthode, toutes les pages regardez vide du tout début jusqu'à ce que vous ajoutiez du code.

Mais souvent ils sont utiles. Si vous voulez outrepasser certaines des méthodes de la classe de base, vous pouvez avoir le comportement outrepassé partagé à travers toutes les pages. Ou, vous pouvez vouloir exposer des objets spécifiques à l'application aux pages enfants (une référence à une couche d'accès aux données, un logger ou autre). Un exemple est primordial UICulture propriété pour récupérer la langue préférée de l'utilisateur à partir des cookies.

les deux peuvent être combiné

selon vos objectifs, vous pouvez combiner des pages maître avec des pages de base.

je vous suggère de toujours créer une classe de page de base, car si les exigences de votre application changent avec le temps et que vous avez déjà créé beaucoup de pages, vous pouvez essayer de modifier la classe de base pour que les modifications se propagent à toutes les pages, en fonction de leur niveau de complexité.

4
répondu usr-local-ΕΨΗΕΛΩΝ 2011-02-18 13:19:42

découvrez masterpages c'est leur but premier.

Voici un lien: http://msdn.microsoft.com/en-us/library/wtxbf3hh.aspx

ceci servira de modèle pour votre site. Vous ajouteriez une section de contenu qui constituerait le corps de votre site. Vous pouvez référencer la page principale est vos sous-pages pour avoir une mise en page cohérente, menu, etc. pour vous le site.

Aussi, comme les autres l'ont noté. Si vous utilisez un code commond, il suffit de créer une classe de référence à partir de là où vous en avez besoin.

1
répondu Matt 2011-02-18 13:24:26

Ça dépend de la taille et de la complexité de votre projet. Pour les petits sites Web avec une fonctionnalité minimale, une page de base pourrait être exagérée. Cela dit, Je l'utiliserais généralement pour des fonctionnalités à l'échelle du site, comme la sécurité. J'ai tendance à garder la fonctionnalité dans les pages maîtresses à un minimum puisque leur but principal est d'organiser votre mise en page et d'éliminer les zones d'affichage communes de vos pages de contenu pour éviter la duplication et faciliter la maintenance.

pour créer une page de base à utiliser dans un page maître scénario, vous pouvez utiliser la syntaxe suivante:

Page:

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

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

Page De Base:

<%@ 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>

Page De Contenu:

<%@ 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>
1
répondu IrishChieftain 2011-02-18 20:08:26

si vous avez besoin de fonctionnalités communes sur toutes vos pages qui appartiennent à la classe page, créez une classe de base commune.

si vous n'avez pas besoin d'une telle fonctionnalité commune sur toutes vos pages, ne créez pas une classe de base commune.

Si vous ne pouvez pas décider, d'avoir une classe de base n'est pas fait de mal à personne, alors vous pourriez aussi bien avoir un (je dirais que vous finissent plus souvent avoir besoin de certaines fonctionnalités communes que pas du tout)

0
répondu Matti Virkkunen 2011-02-18 13:15:30