我正在尝试优化我们网站上的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,因此代码隐藏不是一个可接受的选择。
答案 0 :(得分:2)
以下内容可以防止您复制和粘贴代码。
选项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
注意:如果您在Action中填充数据,那么您不必将此添加到任何页面。
像这样:
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 :(得分:1)
如果你真的很烦(我不明白你为什么会在HTML中给出空格并不重要)你可以尝试在代码隐藏中设置这样的东西:
Page.Title = WebsiteSettings.WebsiteName + " " + Page.Title;
答案 2 :(得分: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;
}
答案 3 :(得分:0)
您可以尝试文字控件,但我怀疑在asp.net表单之外的文档标题中不起作用。您也可以尝试通过代码隐藏设置标题。
答案 4 :(得分:0)
这是一种可能性 -
重写渲染例程以删除带有正则表达式的空格:
http://madskristensen.net/post/Remove-whitespace-from-your-pages.aspx