我正在使用asp.net。我注意到我们可以通过两种方式配置页面标题(静态和动态):
我们在页面指令中有Title
属性:
<%@ Page Language="C#" Inherits="_Default" Title="My Title" ......%>
我们在页面中还有<title>
标记:
<title runat="server" id="MyTitle"> My Title</title>
两者都可以在代码隐藏文件中访问:
MyTitle.Text = "Title from Code behind";
Page.Title = "Page Title from CS";
我发现页面指令覆盖了html标题。那么我们应该使用哪一个?为什么?
答案 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";
}
视觉:
现在让我们看看:
当我按Run
时:
网页确实有html标题值(ffffff
)
也在PreInit
调查OnInit
显示已经已经更改了(以及{如果您想确切地知道在哪个阶段 - 可以这样做}} ppppppppp
< / p>
当然,最后一个事件(在我们所讨论的内容中)是page_load
:它会改变价值:
值是:
那么选择哪个?
如果您的代码动态更改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页面的代码隐藏类中。