我使用page title
从code behind
分配C#
。一切正常!但是,问题就在于Title Text is displayed with LINE BREAK
。
那么,如何prevent the Line Break
的 Title
?
phonesOnly.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage_New.master" AutoEventWireup="true" CodeFile="phonesOnly.aspx.cs" Inherits="phonesOnly" %>
phonesOnly.aspx.cs
protected void SetTitle()
{
this.Page.Title = "Sell Your Cell Phone Online or at our Los Angeles locations";
}
查看页面来源:
<title>
Sell Your Cell Phone Online or at our Los Angeles locations
</title>
没有换行的预期渲染:
<title>Sell Your Cell Phone Online or at our Los Angeles locations</title>
注意:
我知道我可以使用<title id="mytitle" runat='server'></title>
完成但我受限制以使用runat=server
。可能是由于 SEO 的观点。
请建议任何其他解决方案?
答案 0 :(得分:1)
不幸的是,只要你添加一个runat =&#34;服务器&#34;到<head>
标签,这就是发生的事情。 HtmlHead
类在head标签内部解析你的内容,然后重写它,不幸的是,当它这样做时会把它搞砸。获得正确格式化输出的唯一方法是避免使用服务器端头标记,这意味着您不能使用Page.Title属性,因此您必须使用自己的标题变量,但是您可以通过为其分配null来删除id。在后面的代码中的id。
以下按预期方式工作:
<head> <!-- note no runas="server" -->
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title runat="server" id="myTitle"></title>
...
</head>
然后在代码背后:
myTitle.InnerText = "My Page Title";
myTitle.ID = null;
这将生成以下HTML。
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>My Page Title</title>
...
</head>
这样做的好处是它不会将所有元标记聚集在一行上。
如果你正在使用母版页面,那么你必须做一些小箍跳来取代母版页的控件。在Master页面上创建一个属性以返回控件,或者像这样使用FindControl:
var ctl = Master.FindControl("myTitle") as HtmlGenericControl;
ctl.InnerText = "My Page Title";
ctl.ID = null;
确保您没有在母版页中将ID设置为null,或者FindControl在内容页面中无法工作。
答案 1 :(得分:1)
我的团队遇到了同样的问题。我们通过包装原始的HtmlTitle对象并剥离换行符来修复它。
包装类:
/// <summary>
/// Exists to remove the newlines created by asp.net
/// </summary>
public class TrimmedHtmlTitle : HtmlTitle
{
private readonly HtmlTitle _title;
public TrimmedHtmlTitle(HtmlTitle title)
{
_title = title;
}
protected override void Render(HtmlTextWriter output)
{
if (_title == null)
{
return;
}
try
{
using (var stringWriter = new System.IO.StringWriter())
{
using (var htmlTextWriter = new HtmlTextWriter(stringWriter))
{
_title.Text = Text;
_title.RenderControl(htmlTextWriter);
var content = stringWriter.ToString().Replace("\r", "").Replace("\n", "").Replace("\t", "").Trim();
output.Write(content);
}
}
}
catch { }
}
}
设置和用例:
var head = page.Controls.OfType<HtmlHead>;
if (head != null)
{
var htmlTitle = head.Controls.OfType<HtmlTitle>().FirstOrDefault();
if (htmlTitle != null)
{
var index = head.Controls.IndexOf(htmlTitle);
head.Controls.Remove(htmlTitle);
head.Controls.AddAt(index, new TrimmedHtmlTitle(htmlTitle));
head.Title = "MyTitle";
}
}