5

我正在尝试优化我们网站上的 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,所以代码隐藏不是一个可接受的选项。

4

5 回答 5

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

注意:如果您在操作中填充数据,那么您不必将其添加到任何页面。

像这样:

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 回答