【问题标题】:Page.Title vs Title tag in asp.netasp.net 中的 Page.Title 与 Title 标签
【发布时间】:2013-10-14 00:04:27
【问题描述】:

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

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

      <%@ Page Language="C#" Inherits="_Default"  Title="My Title" ......%>
    
  2. 我们在页面中也有&lt;title&gt;tag:

    <title runat="server" id="MyTitle"> My Title</title>
    

两者都可以在代码隐藏文件中访问:

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

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

【问题讨论】:

标签: c# asp.net webforms


【解决方案1】:

最大的不同在于MyTitle.Text 必须使用idrunat 属性来装饰Title 元素,并记住它的名称以便引用它。例如,当您使用 Masterpage 时,从子页面访问此值也不是那么容易..

另一方面,Page.Title 对每个页面都是通用的,因此在我看来它更通用。与您合作的每个新开发人员都无需学习任何新知识,只需使用 Page.Title 格式..

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

无论你喜欢用哪个,坚持下去,这样你就不会混合使用各种设置标题的方式。这样您就不必担心哪个事件先发生或担心您的同事会覆盖您的价值观。

【讨论】:

  • 这个网站不是关于“投票”(正如你所说的“我的投票”)。您应该根据事实/来源/代码/文档提供答案。
  • @RoyiNamir,你知道这个问题没有明确的答案。两个选项都可以。我已经描述了这两种变体,并说,我更喜欢什么。它有什么不好?你真的想玩文字游戏吗?
  • 我发现页面指令覆盖了 html 标题。....答案应该解释为什么。 (这就是操作员实际要求的)
  • 尊敬的先生。也许你应该重新阅读这个问题。很清楚:So Which one should we use and why ? 我已经说了是哪一个,我已经说了原因。如果您对此有任何疑问,请随时投反对票、举报等。或者也许你自己提供一个答案,这样你就可以告诉我们我们有多么错误。
  • 如果你想谈谈,我们在这里聊天和许多热心的人。如果您感到无聊,请随意使用它,因为这无济于事。您没有提出任何建设性意见,您也不愿意正确阅读。
【解决方案2】:

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

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

长答案:

这是我的观察(带有一个小测试):

我将title 设置为Page directive

&lt;%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="Exampales_test" Title="ppppppppp" %&gt;

我也是通过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";
}

视觉:

现在让我们看看:

当我按下Run 时:

页面确实有 html 标题 值 (ffffff)

也在PreInit的末尾

调查OnInit 表明它已经更改为ppppppppp

当然,最后一个事件(我们讨论过的)是page_load:它确实改变了值:

值是:

那么选择哪一个呢?

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

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

正如您已经注意到的那样 - 获胜的价值是最后发生的人(时间线)

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

【讨论】:

  • “哪一个出现在最末端”并不重要,重要的是你实际使用的是哪一个。这是一个非常有缺陷的观点。您所展示的只是处理没有实际价值的 asp.net 页面的序列(除非您正在处理一个在一个应用程序中使用所有方法的精神分裂症患者)。设置标题的一种统一方式会使您的“结论”无效...
  • @walther 是一回事。如果您只使用一个地方,那么以后就没有代码会覆盖这些值。我的测试显示了从一开始页面生命周期中的值如何变化。现在 OP 应该知道如果需要动态标题,那么应该在稍后阶段通过代码设置它,而不是使用 HTML 标记标题标签。
【解决方案3】:

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

虽然&lt;title&gt; 可以在 ASP.NET 网页中静态设置,但在 许多情况下,标题取决于 页。例如,一个网站可能有一个 ShowProduct.aspx?ID=productID 页面。而不是使用静态 &lt;title&gt;&lt;title&gt; 的值最好是 正在查看的产品(即 ProductID 等于 productID 值通过查询字符串传递)。不幸的是,在 ASP.NET 1.x 版,设置任何 HTML 元数据元素(例如 &lt;title&gt;) 要求开发者在 在 HTML 标记中的适当位置,然后设置其值 以编程方式在 ASP.NET 页面的代码隐藏类中。

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

【讨论】:

  • 对其进行了编辑,使尖括号&lt;&gt; 在引号中可见-否则阅读起来会有些混乱。我想我都得到了。
  • @Damien_The_Unbeliever 是徒劳的。显然其他答案更受欢迎。
猜你喜欢
  • 2014-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-18
相关资源
最近更新 更多