Разрывы строки ASP.NET в элементе заголовка

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

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

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

   <title>
    Home
 - Website Name</title>

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

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

5
задан Nathan Taylor 29 April 2010 в 15:54
поделиться

4 ответа

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

Вариант 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)
            }
    }
}

Теперь на вашей Master Page просто поместите это

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

Затем на ваших страницах используйте это

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

Вариант 2

Примечание: если вы заполняете данные в вашем Action, то вам не нужно добавлять это на каждую страницу.

Например, так:

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

Затем на странице Master вы просто сделаете следующее

<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>
2
ответ дан 15 December 2019 в 00:54
поделиться

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

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

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

0
ответ дан 15 December 2019 в 00:54
поделиться

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

Page.Title = WebsiteSettings.WebsiteName + " " + Page.Title;
1
ответ дан 15 December 2019 в 00:54
поделиться

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

0
ответ дан 15 December 2019 в 00:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: