Я пытаюсь оптимизировать удобочитаемость 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, таким образом, код - позади не является приемлемой опцией.
Следующее должно позволить вам избежать копирования и вставки кода.
Вариант 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>
Это возможность -
Переопределить процедуру визуализации для удаления пробелов с помощью регулярных выражений:
http://madskristensen.net/post/Remove -whitespace-from-your-pages.aspx
Если вас действительно беспокоят (и я не понимаю, почему вам должны быть предоставлены пробелы, это не важно в HTML) вы можете попробовать установить его в коде программной части примерно так:
Page.Title = WebsiteSettings.WebsiteName + " " + Page.Title;
Вы можете попробовать использовать литеральный элемент управления, хотя я подозреваю, что он не будет работать в заголовке документа вне формы asp.net. Можно также попробовать установить заголовок через code-behind.