web-dev-qa-db-ja.com

asp.netのPage.Title vs Titleタグ

私はasp.netを使用しています。ページタイトル(静的と動的の両方)を次の2つの方法で構成できることに気づきました。

  1. ページディレクティブにTitle属性があります。

      <%@ Page Language="C#" Inherits="_Default"  Title="My Title" ......%>
    
  2. ページには<title>tagもあります。

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

どちらも分離コードファイルでアクセスできます。

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

そして、私はページディレクティブがHTMLタイトルを上書きすることを発見しました。では、どちらを使用する必要がありますか。その理由は何ですか。

22
Arshad

最大の違いは、MyTitle.Text Title要素をid AND runat属性で装飾し、参照できるように名前を覚えておく必要があります。また、たとえばMasterpageを使用している場合、子ページからこの値にアクセスするのは簡単ではありません。

一方、 Page.Titleはすべてのページに共通なので、私の意見ではより普遍的です。新しい開発者は、Page.Title形式を使用するだけで、新しいことを学ぶ必要はありません。

だから私の投票は「伝統的な」Page.Title

どちらを使用してもかまいませんので、タイトルを設定するさまざまな方法を混在させることはありません。そうすれば、どのイベントが最初に発生するか、または同僚が値を上書きすることについて心配する必要はありません。

10
walther

短い答え:(それはあなたのニーズに依存します)。説明します。

  • タイトルは実行時に変更する必要があるかどうかによって異なります。

長い答え:

これが私の観察です(小さなテストで):

私はtitlePage directiveに設定しました:

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

htmlでも設定します。

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

私はこのテストコードを持っています:

 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";
}

ビジュアル:

enter image description here

今見てみましょう:

Runを押すと:

ページhtmlタイトルがあります値(ffffff

enter image description here

PreInitの最後にも

enter image description here

OnInitを調査すると、alreadyが変更されていることがわかります({どの段階で正確に知りたい場合-これは可能です) })からppppppppp

enter image description here

そしてもちろん、最後のイベント(私たちが話し合ったものの中で)はpage_load:です。これは値を変更します:

enter image description here

そして値は:

enter image description here

それでどちらを選ぶか?

コードがTitleを動的に変更している場合(つまりruntime)、htmlマークアップもページディレクティブも使用しないでください。

例えば(たとえば)コードにASCXがあり、ACSXがタイトルを変更する必要がある場合は、コードを使用します(ディレクティブやHTMLマークアップではありません)。

あなたがすでに気づいたように-勝つ価値は最後に発生するものです(タイムライン)

Htmlマークアップ値で始まりますが、サーバー側のコードがアクティブになり、値を変更します。

11
Royi Namir

ここに違いの良い記事があります。彼らは基本的に同じことをします。それはあなたがしたいことだけです。

<title>はASP.NET Webページで静的に設定できますが、多くのシナリオでは、タイトルはページに表示されるデータに依存します。たとえば、WebサイトにShowProduct.aspx?ID = productIDページがある場合があります。静的<title>を使用するのではなく、<title>の値は、表示されている製品(つまり、ProductIDがクエリ文字列を通じて渡されたproductID値と等しい製品)の名前であることが理想的です。残念ながら、ASP.NETバージョン1.xでは、HTMLメタデータ要素(<title>など)を設定するには、開発者がリテラルコントロールをHTMLマークアップの適切な場所に追加し、その値をプログラムでASPに設定する必要がありました。 .NETページの分離コードクラス。

ここからコピー http://www.4guysfromrolla.com/articles/051006-1.aspx

0
Anthony Russell