5

ページのタイトルを動的に設定する必要があるため、次のようなコードを使用します。

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="~/about.aspx.cs" Inherits="Default" %>
<%@ Register Assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="ajaxToolkit" %>
<%@ MasterType VirtualPath="MasterPage.master" %>
<%@ OutputCache Duration="43200" VaryByParam="*" Location="Server" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
 <title><%=pageTitle%></title>
</asp:Content>

ただし、これにより重複したタイトルタグが生成されます。これを回避する方法はありますか?ありがとう。

編集:以下の提案に続いて、MasterPage に次のものがあります。

<head id="Head1" runat="server">
<title>Default Title</title>
...
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head> 

そして、私のプライマリページの以下:

    this.Title="xxx";

しかし、私はタイトルを取得していません(「デフォルトのタイトル」でも「xxx」でもありません)。

編集:気にしないでください。その方法を使用して動作しました。

4

8 に答える 8

11

2 番目のタイトル タグが空で、タグの末尾にある場合head、Head コントロール ( に注意runat="server") はそのコントロール内の Title コントロールを認識できないため、空の Title タグが最後に追加されます。

ここでの回答のほとんどは有効ですが、最小限の変更でできることは、ヘッドコントロールに次を追加することです-

<title id="Title1" visible="false" runat="server"><%-- hack to turn the auto title off --%></title>

その他のオプションは次のとおりです-

  • ヘッドコントロールをrunat="server"外しますが、これはサーバー側のコントロールを使用できないことを意味します
  • タイトル コントロールを使用し、ソリューションのようにプログラムで設定します。

テンプレートに保持する ContentPlaceholder アプローチを使用できるため、非表示のタイトル タグが気に入っています。また、カスタム コントロールを使用してタイトルを取得することもできます (この場合、サード パーティのライブラリを使用して DB からタイトルを取得しています)。

この背景については、Phil Haack によるこのブログ投稿を参照してください。

于 2011-08-08T06:09:30.580 に答える
8

.master のヘッダーは次のようにする必要があります。

<head runat="server">
<title>Default Title</title>
  .. other tags
</head>

次に、Page_Load のページ コード ビハインドで、次のように記述します。

protected void Page_Load(object sender, EventArgs e)
{
    this.Title = "My Page Title";
}
于 2010-01-20T15:20:03.777 に答える
5

タグの重複を避けるには、次のようにします。追加のコードは必要ありません。

MasterPage には、次のようなものがあります。

<head>
    <title></title>
    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>

そして、他のすべてのページで、Title="Your Title" 属性を page ディレクティブに追加します。

<%@ Page Title="Your Title" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

これにより、タグの重複がなくなり、タイトルがコード ビューの上部に明確に表示されます。

お役に立てれば。

于 2010-03-18T19:23:41.757 に答える
0

代わりにこれを試してください

        ((MyPageClass)Page).Title = "Your Page Title"

このコードは、マスター ページの Page_Load に入ります。キャスト ("MyPageClass") を使用する必要があります。これは、独自の PageClass を派生させて、厳密に型指定されたセッション オブジェクトをそこに置くことができるためです。そうでない場合は、キャストは必要ありません。

ページレベルでこれを行う必要がある場合は、次を使用できると思います。

     Title = "Your Page Title"

あなたのPage_Loadで。

于 2010-01-20T15:08:56.937 に答える
0

私は使用すると思います:

ページレベルでタイトルを設定したい場合

<%@ Master ... %>
<html>
<head runat="server">
  <title>
    <asp:ContentPlaceHolder ID="titleContent" runat="server" />
  </title>
</head>

または、

マスター ページ レベルで動的タイトルを設定する場合。

<%@ Master ... %>
<html>
<head runat="server">
  <title>
    <asp:Literal ID="litPageTitle" runat="server"></asp:Literal>
  </title>
</head>

空の 2 番目のタイトル タグが生成されないようにするためのより良い方法です。

于 2013-05-03T04:43:23.373 に答える
0

2年ほど経った今でも、この問題は解決していません。サイトのSEO対策。

MVC 4.5RC を使用。マスター コンテンツ領域の前に空のタグを配置するだけです。再コード化する必要はありません。コード内にタイトルを設定します。そのようです:

<title></title>
<asp:contentPlaceHolder><title>Rise Sir...</title><asp:contentPlaceHolder>

単純。

于 2012-07-02T22:04:20.517 に答える
0

コントロールを定義する際に、<asp:Content ContentPlaceHolderID="head">既に存在するタイトルを変更するのではなく、ID「head」を持つコンテンツ プレース ホルダーにさらにマークアップを追加します。マスター ページには、次のようなものがあると思います。

<head>
  <title>Master Page Title</title>
  <asp:ContentPlaceHolder id="head" runat="Server" />
</head>

したがって、<asp:ContentPlaceHolder>が に置き換えられる<asp:Content ContentPlaceHolderID="head">ため、最終的には 2 番目の<title>要素になります。

したがって<title>、マスター ページから を削除するか (すべて<title>の aspx ファイルでが必要になることを意味します) 、コードを使用して次のようなことを行います...

this.Title = pageTitle;
// if that doesn't do it try
// this.Header.Title = pageTitle;
于 2010-01-20T15:26:05.323 に答える
0

マスター ページのタイトル セクションが次のようになっている場合:
<title><%=someTitleVariable%></title>

次に、代わりにこれをコードとして使用します。
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> <%=pageTitle%> </asp:Content>

于 2010-01-20T15:21:38.420 に答える