Web ページ タイトルの単一ポイント処理スキル。
最近、.net2.0 で ms が提供するページ ナビゲーション コンポーネントの sitemappath を使用する際に、ページ タイトルの非同期の問題を解決する簡単で便利なメカニズムを考えました。それをみんなと一緒に。
現在の問題:
1. 通常、Web サイト全体で aspx ページ タイトルを格納する統一された場所はありません。ページごとに、ページ タイトルはページの aspx ファイルに直接ハードコーディングされるか、aspx.cs (追加のタイトル) を通じて動的に書き込まれます。また、Page.Title プロパティは 1.1 Control で追加され、Page.Title プロパティは 2.0 で使用できます)。サイト全体に多数の Web ページがある場合、この繰り返しのロジック コードを何度も記述する必要があり、これは非常に見苦しいため、実行できません。タイトル情報が使用される他の場所でも同期されます。
2. 多言語サポートをサポートするためにすべてのページ タイトルがリソース (または xml) ファイルに配置されている場合でも、Tongyi プログラム コードを介してタイトルを読み込む際に問題が発生します。つまり、ページ タイトルがページ (ページ ナビゲーション コントロール) などのタイトル領域だけでなく、これらのコントロールにもこれらのリソース ファイル (または xml) からタイトル情報を取得させる方法も頭の痛い問題です。
達成すべきこと:
1. Web ページのタイトルに関するすべての問題を、Web サイト全体のメイン テンプレートで一度に解決します。すべての Web サイトで使用されるタイトルは Web.sitemap (複数の言語をサポート可能) で維持されるため、ページのナビゲーション情報も維持できます。同時に。 。
2. (ユーザー ログイン | Qisi ソフトウェア) など、ポップアップ フォームのタイトルの各 Web サイト タイトルの後にサイト名が自動的に追加されますが、ページ ナビゲーション コントロールでタイトルを参照する場合、サイト名は表示されません。 (ホーム>メンバーセンター>ユーザーログイン)として。
3. aspx.cs プログラムで page.Title 属性が参照される場合、サイト名を含めることはできません。たとえば、ページ タイトル バーには (ユーザー ログイン | Qisi ソフトウェア) が表示されますが、page.Title 値は通常の形式で参照されます。このページのプログラムは(ユーザーログイン)です。
具体的な実装方法は以下の通りです。
次のコードを Web サイトのマスターページに追加します。
protected void Page_Load(オブジェクト送信者, EventArgs e)
{
if (!this.IsPostBack)
{
this.searchDescription.Content = this.SearchDescription;
this.searchKeywords.Content = this.SearchKeywords;
}
if (SiteMap.CurrentNode != null)
{
this.Page.Title = SiteMap.CurrentNode.Title;
}
それ以外
{
this.Page.Title = "このページ ナビゲーションは Web.sitemap で構成されていません";
}
}
protected オーバーライド void Render(HtmlTextWriter ライター)
{
this.Page.Title = this.Page.Title + " | " + Keyss.WebFramework.ConfigManager.GetInstance().SiteName;
Base.Render(ライター);
}
説明する:
1. (!this.IsPostBack){} ブロックにページ判定が実装されていないのは、page.Title にビューステートを保存できないためです。これは .net2.0 の小さなバグだと思います。
2. render メソッドで title 属性が書き換えられる理由は、render メソッドがページの存続期間中にビューステートを保存しないためです。ページから書き込まれたタイトルの内容は、マスターページでのみ有効です。ページの render メソッドでは、タイトルがレンダリングされていますが、タイトルを変更してもレンダリング結果には影響しません。
出典: Qisi ソフトウェア ブログ