web-dev-qa-db-fra.com

Page.Title vs Title tag dans asp.net

J'utilise asp.net. J'ai remarqué que nous pouvons configurer le titre de la page (statique et dynamique à la fois) de deux manières:

  1. Nous avons un attribut Title dans la directive page:

      <%@ Page Language="C#" Inherits="_Default"  Title="My Title" ......%>
    
  2. Nous avons également <title>tag dans la page:

    <title runat="server" id="MyTitle"> My Title</title>
    

Les deux sont accessibles dans un fichier code-behind:

    MyTitle.Text = "Title from Code behind";
    Page.Title = "Page Title from CS";

Et j'ai trouvé que la directive de la page remplace le titre html. Alors, lequel devrions-nous utiliser et pourquoi?

22
Arshad

La plus grande différence est qu'avec MyTitle.Text vous devez décorer l'élément Title avec les attributs id AND runat, et n'oubliez pas son nom pour pouvoir le référencer. L'accès à cette valeur n'est pas aussi simple à partir des pages enfants lorsque vous utilisez Masterpage par exemple ..

D'autre part, Page.Title est commun à toutes les pages, il est donc plus universel à mon avis. Chaque nouveau développeur avec qui vous travaillerez n'aura pas à apprendre quoi que ce soit de nouveau, utilisez simplement le format Page.Title.

Mon vote irait donc au "traditionnel" Page.Title

Peu importe ce que vous souhaitez utiliser, respectez-le, afin de ne pas mélanger différentes façons de définir le titre. De cette façon, vous n'aurez pas à vous soucier de l'événement qui se produira en premier ou de l'écrasement de vos valeurs par votre collègue.

10
walther

Réponse courte: (cela dépend de vos besoins). je vais t'expliquer.

  • cela dépend si votre titre doit changer au moment de l'exécution.

Longue réponse :

Voici mon observation (avec un petit test):

J'ai mis title au Page directive:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="Exampales_test" Title="ppppppppp" %>

J'ai également défini via html:

<head runat="server" ID="hhh">
     ...
    <title runat="server">fffffffff</title>
</head>

J'ai ce code de test:

 protected override void OnPreInit(EventArgs e)
    {
     // <-----  breakpoint here (A)
        base.OnPreInit(e);
     // <-----  breakpoint here (B)
    }


protected void Page_Load(object sender, EventArgs e)
{ // <-----  breakpoint here (C)
    this.Title = "cccccccc";
}

Visuel:

enter image description here

Voyons maintenant:

Lorsque j'appuie sur Run:

La page a le titre html valeur (ffffff)

enter image description here

Toujours à la fin de PreInit

enter image description here

L'étude de OnInit montre qu'il a déjà changé (de la manière {si vous voulez savoir exactement à quelle étape - cela peut être fait }) à ppppppppp

enter image description here

Et bien sûr, le dernier événement (parmi ceux dont nous avons parlé) est le page_load: ce qui change la valeur:

enter image description here

Et la valeur est:

enter image description here

Alors lequel choisir?

Si votre code modifie dynamiquement le Title (je veux dire à runtime), n'utilisez pas du tout le balisage html ni la directive page.

par exemple. si votre code est (par exemple) a ASCX et que ACSX doit changer le titre, alors utilisez simplement le code (pas de directive ni de balisage html).

Comme vous l'avez déjà remarqué - la valeur qui gagne est celle qui se produit en dernier (chronologie)

Il commence par la valeur de balisage html, mais ensuite le code côté serveur commence à s'activer et change les valeurs.

11
Royi Namir

Voici un bon article sur les différences. Ils font essentiellement la même chose. C'est juste CE QUE vous voulez faire qui compte.

Alors que <title> Peut être défini de manière statique dans une page Web ASP.NET, dans de nombreux scénarios, le titre dépend des données affichées dans la page. Par exemple, un site Web peut avoir une page ShowProduct.aspx? ID = productID. Plutôt que d'utiliser un <title> Statique, la valeur du <title> Serait idéalement le nom du produit visualisé (c'est-à-dire le produit dont le ProductID est égal à la valeur productID transmise par la chaîne de requête). Malheureusement, dans ASP.NET version 1.x, la définition de tous les éléments de métadonnées HTML (tels que <title>) Exigeait que le développeur ajoute un contrôle Literal au bon endroit dans le balisage HTML, puis définisse sa valeur par programme dans le Classe code-behind de la page ASP.NET.

Copié d'ici http://www.4guysfromrolla.com/articles/051006-1.aspx

0
Anthony Russell