Page。标题与asp.net中的标题标记

时间:2013-10-07 12:04:44

标签: c# asp.net webforms

我正在使用asp.net。我注意到我们可以通过两种方式配置页面标题(静态和动态):

  1. 我们在页面指令中有Title属性:

      <%@ Page Language="C#" Inherits="_Default"  Title="My Title" ......%>
    
  2. 我们在页面中还有<title>标记:

    <title runat="server" id="MyTitle"> My Title</title>
    
  3. 两者都可以在代码隐藏文件中访问:

        MyTitle.Text = "Title from Code behind";
        Page.Title = "Page Title from CS";
    

    我发现页面指令覆盖了html标题。那么我们应该使用哪一个?为什么?

3 个答案:

答案 0 :(得分:10)

简短回答:(这取决于您的需求)。我会解释一下。

  • 这取决于您的标题是否应在运行时更改。

答案很长:

这是我的观察(通过一个小测试):

我在title

设置Page directive

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="Exampales_test" Title="ppppppppp" %>

我也通过html设置:

<head runat="server" ID="hhh">
     ...
    <title runat="server">fffffffff</title>
</head>

我有这个测试代码:

 protected override void OnPreInit(EventArgs e)
    {
     // <-----  breakpoint here (A)
        base.OnPreInit(e);
     // <-----  breakpoint here (B)
    }


protected void Page_Load(object sender, EventArgs e)
{ // <-----  breakpoint here (C)
    this.Title = "cccccccc";
}

视觉:

enter image description here

现在让我们看看:

当我按Run时:

网页确实有html标题值(ffffff

enter image description here

也在PreInit

的末尾

enter image description here

调查OnInit显示已经已经更改了(以及{如果您想确切地知道在哪个阶段 - 可以这样做}} ppppppppp < / p>

enter image description here

当然,最后一个事件(在我们所讨论的内容中)是page_load:它会改变价值:

enter image description here

值是:

enter image description here

那么选择哪个?

如果您的代码动态更改Title(我的意思是运行时),请不要使用html标记或页面指令。

e.g。如果您的代码(例如)具有ASCX并且ACSX应该更改标题,那么只需使用代码(不是指令或html标记)。

正如您已经注意到的那样 - 赢得的值是最后一个(时间轴)

它以html标记值开头,但随后服务器端代码开始激活并更改值。

答案 1 :(得分:9)

最大的区别在于,使用MyTitle.Text时,您必须使用id AND runat属性来装饰Title元素,并记住它的名称,以便您可以引用它。当你使用Masterpage时,从子页面访问这个值并不容易..

另一方面,Page.Title对每个页面都是通用的,所以在我看来它更普遍。您将使用的每个新开发人员都不需要学习任何新东西,只需使用Page.Title格式..

所以我的投票将转到“传统”Page.Title

无论您喜欢使用哪种方法,请坚持使用,因此您不会混合使用各种方式来设置标题。这样您就不必担心首先发生的事件或者您的同事覆盖您的价值观。

答案 2 :(得分:0)

这是一篇关于差异的好文章。他们基本上做同样的事情。这就是你想要做的事情。

  

虽然可以在ASP.NET网页中静态设置<title>,但是   许多情况下标题取决于显示的数据   页。例如,一个网站可能有一个   ShowProduct.aspx?ID = productID页面。而不是使用静态   <title><title>的值理想情况下是<title>的名称   正在查看的产品(即ProductID等于的产品   productID值通过查询字符串传递)。不幸的是,在   ASP.NET版本1.x,设置任何HTML元数据元素(例如   {{1}})要求开发人员在中添加Literal控件   在HTML标记中放置适当的位置,然后设置其值   以编程方式在ASP.NET页面的代码隐藏类中。

从这里复制 http://www.4guysfromrolla.com/articles/051006-1.aspx