设置页面标题不起作用

时间:2011-08-23 21:06:13

标签: .net asp.net page-title

我遇到一个奇怪的问题,即在代码级别设置ASP.NET页面的Title属性没有任何影响。它也没有抛出异常。我的类是Page类的派生类,但我并没有重写标题。

在代码中我有这一行:

Title = "About";

在调试时,我就在那一行,我把光标放在Title上作为常规,它显示""一个空字符串,这是预期的,我走下那条线,期待(显然){{ 1}}得到值Title但是当我悬停时,我仍然得到一个空字符串。属性设置不起作用。是的,它在输出页面也是空的。好吧,我错过了那里的东西吗?

10 个答案:

答案 0 :(得分:39)

如果要从C#代码设置标题,请确保未在aspx页面中设置标题。 (即使是空白的标题也会覆盖C#代码中的标题)

以下代码将使用空字符串覆盖C#代码中的标题集:

<%@ Page Language="C#" Title="" ... %>

您必须删除Title属性才能在C#代码中设置它:

<%@ Page Language="C#" ... %>

答案 1 :(得分:9)

我在Title属性上遇到了类似的问题。我的问题回到了缺少Title属性的<%@ Page %>指令。确保已将Title属性添加到ASPX文件上的Page指令,如:

<%@ Page Language="C#" Title="Default Title" %>

答案 2 :(得分:6)

我正在切换到我的页面的新母版页,我的标题停止了工作。

我老的,工作的母版页有这个

<head runat="server">

我新的,失败的母版页有这个

<head>

所以它就像确保标签中有runat =“server”一样简单。

答案 3 :(得分:4)

这个怎么样(有点奇怪但仍然如此:)):

第1步:将ContentPlaceHolder添加到母版页的标题标记

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

第2步:将以下内容添加到内容页面

...
<asp:Content ContentPlaceHolderID="TitleContentPlaceHolder" runat="server" ID="TitleContent">
    <asp:Literal runat="server" ID="TitleLabel"></asp:Literal>
</asp:Content>
...

第3步:尝试设置标题(例如,在页面加载时)

protected void Page_Load(object sender, EventArgs e)
    {
        ...
        TitleLabel.Text = "Some title";
        ...
    }

答案 4 :(得分:1)

我遇到了类似的问题(在代码隐藏中设置Me.Title属性并没有改变渲染页面的实际标题。)

完全<%@ Page %>指令中删除了 Title属性后,一切都按预期开始工作。

我在MasterPage <head>中有这个:

<title><%= Page.Title %></title>

(这一点似乎没有必要,因为ASP.NET无论如何都会向<title>添加<head>元素......但没有它,Visual Studio HTML验证器会抱怨“元素”标题“出现的次数太少”,所以我把它留在那里。)

  • Visual Studio 2010 Pro
  • .NET 4.0
  • IIS 7.0

答案 5 :(得分:1)

这项工作仅适用于PreRender

protected void Page_PreRender(object sender, EventArgs e)
    {
        Page.Title = "Some title";

    }

答案 6 :(得分:0)

<%@ Master ..
<head runat="server">
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title><%: Page.Title %></title>

..

<%@ Page Title="ABOUT" ..

答案 7 :(得分:0)

<%@ Page meta:resourcekey="PageResource1" culture="auto"

看到了吗?
始终检查meta:resourcekey的存在。
事实证明,您有一个.resx资源文件,其中包含记录

PageResource1.Title

具有空值。
如果您忘记了它,那么您要做的就是使用

protected void Page_Load(object sender, EventArgs e)
{
    Title = "My tilte";

答案 8 :(得分:0)

最重要的答案都是正确的。您可以从<%@ Page指令中删除标题,或确保标题不为空(Title="")。因此,如果您有Title="Foo",则可以在代码中进行更改。如果从Page指令中删除Title="",则可以在代码中进行更改。

答案 9 :(得分:-3)

尝试在页面DataBind之后设置标题:

public override void DataBind()
{
    base.DataBind(true);
    Title = "Ballout";
}