5

私はウェブサイトでSEOの読みやすさを最適化しようとしていますが、遭遇した問題の1つは、ASP.NETがMasterPageのタイトル要素を破壊していることです。私のMasterPageにそのように入力されました(<% %>タグによって引き起こされた改行を削除するために手動で再フォーマットされました):

<title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /> - <%=WebsiteSettings.WebsiteName %></title>

これは私が受け取る出力です:

   <title>
    Home
 - Website Name</title>

ご覧のとおり、ASP.NETは前後の改行を追加しています。これは、<asp:ContentPlaceHolder />VisualStudioが改行で<asp:Content />開始および終了するように自動フォーマットするためです。明らかに、これはVisual Studioの書式設定オプションで防ぐことができますが、TitleContentプレースホルダーの動作のみを削除し、残りの動作は削除したくないため、これは理想的ではありません。

タイトルがレンダリングされる前に確実にトリミングされるようにする方法はありますか?私はMVCを使用しているため、コードビハインドは受け入れられないオプションです。

4

5 に答える 5

2

以下により、コードのコピーと貼り付けを防ぐことができます。

オプション1

MVC を使用しているので、次のように HTML ヘルパーを作成します。

namespace [ProjectName].Web.Views
{
    public static class HtmlHelpers        
    {
            public static MvcHtmlString GetFullPageTitle(this HtmlHelper helper, string PageTitle)
            {
                return MvcHtmlString.Create(PageTitle + " - " + WebsiteSettings.WebsiteName)
            }
    }
}

マスターページにこれを入れるだけです

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

次に、ページでこれを使用します

<asp:Content ID="PageTitleContent" ContentPlaceHolderID="TitleConent" runat="server">
  <%=Html.GetFullPageTitle("Some PageTitle")%>
</asp:Content>

オプション 2

注: アクションにデータを入力する場合は、これをページに追加する必要はありません。

そのようです:

public ActionResult myAction()
{
     ViewData["Title"] = "MyActionTitle";
     return View()
}

次に、マスターページで次のことを行うだけです

<title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /><%= ViewData["Title"] + "-" +  WebsiteSettings.WebsiteName %></asp:ContentPlaceHolder></title>

これの良いところは、必要に応じて、これを行うことで各ページのタイトルの内容を上書きできることです

<asp:Content ID="PageTitleContent" ContentPlaceHolderID="TitleConent" runat="server">
       My Override Title
    </asp:Content>
于 2010-04-29T16:16:36.443 に答える
1

本当に気になる場合は (HTML では空白が重要ではないという理由がわかりません)、コード ビハインドで次のように設定してみてください。

Page.Title = WebsiteSettings.WebsiteName + " " + Page.Title;
于 2010-04-29T16:00:15.620 に答える
1

dagray が言ったように、正規表現を使用するのが最も安全で簡単な方法です。

このコードは、最初のタイトル タグで最初に出現する改行/文字のみを置き換えます。

void TrimTitleRegex(ref string content)
{
    System.Text.RegularExpressions.Regex rgx = new System.Text.RegularExpressions.Regex(@"\<title\>(.*?)\<\/title\>");
    var result = rgx.Replace(content,
    m =>
    {
        var codeString = m.Groups[1].Value;
        // then you have to evaluate this string
        codeString = System.Text.RegularExpressions.Regex.Replace(codeString, @"\r\n?|\n", "");
        codeString = String.Format("<title>{0}</title>", codeString);
        return codeString.Trim();
    }, 1);

    content = result;
}
于 2014-03-01T13:43:26.733 に答える
0

リテラルコントロールを試すこともできますが、asp.netフォームの外部のドキュメントヘッダーでは機能しないと思われます。コードビハインドを使用してタイトルを設定することもできます。

于 2010-04-29T15:51:35.253 に答える
0

これは可能性です -

レンダリング ルーチンをオーバーライドして、正規表現で空白を削除します。

http://madskristensen.net/post/Remove-whitespace-from-your-pages.aspx

于 2010-04-29T16:04:22.807 に答える