Я должен установить заголовок страницы динамично, и таким образом, я использую код, подобный следующему:
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="~/about.aspx.cs" Inherits="Default" %>
<%@ Register Assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="ajaxToolkit" %>
<%@ MasterType VirtualPath="MasterPage.master" %>
<%@ OutputCache Duration="43200" VaryByParam="*" Location="Server" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
<title><%=pageTitle%></title>
</asp:Content>
Но это генерирует дублирующиеся теги заголовка. Есть ли какой-либо способ, которым я могу обойти это?Спасибо.
Править: Следуя из предложений ниже, у меня теперь есть следующее в моем MasterPage:
<head id="Head1" runat="server">
<title>Default Title</title>
...
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
и следующее на моей основной странице:
this.Title="xxx";
но я не получаю заголовка (ни "Заголовок По умолчанию", ни "xxx").
Править: Nevermind. Получил его работа с помощью того метода.
Заголовок вашего .Master должен выглядеть следующим образом:
<head runat="server">
<title>Default Title</title>
.. other tags
</head>
Тогда в вашей странице код сзади в Page_Load, вы пишете:
protected void Page_Load(object sender, EventArgs e)
{
this.Title = "My Page Title";
}
Попробуйте это Вместо этого
((MyPageClass)Page).Title = "Your Page Title"
Этот код попадает в страницу Page_load вашей главной страницы. Я должен использовать актеры («MyPageClass»), потому что я получаю свой собственный PageClass, поэтому я могу положить настоятельно напечатанные объекты сеанса. Если вы этого не сделаете, то вам не понадобится актеры.
Если вам нужно сделать это на уровне страницы, я думаю, что вы можете просто использовать:
Title = "Your Page Title"
в вашей странице_load.
Если на вашей главной странице Раздел заголовка выглядит следующим образом:
Затем используйте это в качестве вашего кода:
При определении
Control Вы не изменяете заголовка, который уже там, но вместо этого вы добавляете больше разметки на держатель места содержимого с ID "голова". На вашей главной странице я представлял, что у вас есть что-то подобное:
<head>
<title>Master Page Title</title>
<asp:ContentPlaceHolder id="head" runat="Server" />
</head>
, так что
заменяется
Итак, вы в конечном итоге со вторым
элемент.
Так что либо удалите
с вашей главной страницы - что означает, что вам понадобится
в все Ваши файлы ASPX - или Используйте какой-нибудь код, чтобы сделать что-то вроде этого ...
this.Title = pageTitle;
// if that doesn't do it try
// this.Header.Title = pageTitle;
Чтобы избежать дублирования тегов, просто сделайте следующее, без дополнительного кода.
На вашей MasterPage есть что-то вроде этого:
<head>
<title></title>
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
</head>
И на каждой другой странице добавьте атрибут Title="Your Title" к директиве page:
<%@ Page Title="Your Title" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
Это устраняет дублирование тегов и помещает заголовок в ясное, видимое место сверху в представлении кода.
Надеюсь, это поможет.