ASP.NET разрывы строк в элементе заголовка - PullRequest
5 голосов
/ 29 апреля 2010

Я пытаюсь оптимизировать читабельность SEO на наших веб-сайтах, и одна проблема, с которой я столкнулся, - это ASP.NET, разделывающий заголовочный элемент моей MasterPage. Введено в качестве такового в моей MasterPage (отформатирован вручную для удаления разрывов строк, вызванных тегами <% %>):

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

Это вывод, который я получаю:

   <title>
    Home
 - Website Name</title>

Как вы можете видеть, ASP.NET добавляет предшествующие и конечные разрывы строк, где <asp:ContentPlaceHolder /> заменяет, потому что Visual Studio автоматически форматирует <asp:Content />, чтобы начинать и заканчивать разрывом строки. Очевидно, что это можно предотвратить в параметрах форматирования Visual Studio, но это не идеально, потому что я хотел бы удалить это поведение только для заполнителя TitleContent, а не для остальных.

Можно ли как-нибудь убедиться, что мой заголовок обрезан перед его обработкой? Я использую MVC, поэтому использование кода не является приемлемым вариантом.

Ответы [ 5 ]

2 голосов
/ 29 апреля 2010

Следующее должно позволить вам не копировать и не вставлять код.

Вариант 1

Поскольку вы используете MVC, создайте HTML Helper. Вот так:

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>
1 голос
/ 01 марта 2014

Использование регулярных выражений, как сказал Дагрей, - самый безопасный и простой подход.

Этот код заменяет только первое вхождение новой строки / символов в первом теге заголовка.

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;
}
1 голос
/ 29 апреля 2010

Если вы действительно обеспокоены (и я не понимаю, почему вам дали бы пробел, это не важно в HTML), вы можете попробовать установить его в коде позади чего-то вроде этого:

Page.Title = WebsiteSettings.WebsiteName + " " + Page.Title;
0 голосов
/ 29 апреля 2010

Это возможность -

Переопределить процедуру рендеринга для удаления пробелов с помощью регулярных выражений:

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

0 голосов
/ 29 апреля 2010

Вы можете попробовать буквальный элемент управления, хотя я подозреваю, что он не будет работать в заголовке документа вне формы asp.net. Вы также можете попробовать установить заголовок с помощью кода.

...