Установка заголовка страницы из директивы @ Page в ASP.NET с помощью главных страниц

Я использую главные страницы, и у меня возникают проблемы с настройкой заголовков страниц с помощью директивы @ Page. Все мои классы наследуются от класса myPage, который наследуется от класса ASP.NET System.Web.UI.Page. Обратите внимание: у меня установлен runat = "server" в теге заголовка главной страницы.

Вот как выглядят мои директивы @ Page для файла test.aspx.vb:

<%@ Page language="VB" MasterPageFile="~/MainMaster.master" 
autoeventwireup="false" CodeFile="test.aspx.vb" 
Inherits="test" Title="test" %>

Вот как выглядит test.aspx.vb:

Partial Class test
    Inherits myPage

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    End Sub

End Class

Вот как выглядит мой главный файл MainMaster.master:

<%@ Master Language="VB" CodeFile="MainMaster.master.vb" Inherits="MainMaster" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">
    <title>untitled</title>
</head>
...

Теперь, когда вы переходите к просмотру test.aspx в браузере, вы ожидаете увидеть заголовок «тест». но вместо этого вы увидите «без названия» в соответствии с главной страницей. Методом проб и ошибок я изменил класс test, чтобы он наследовал напрямую от System.Web.UI.Page, а не от myPage, вот так:

Partial Class test
    Inherits Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    End Sub

End Class

и все работало нормально. Почему мои страницы, являющиеся дочерними по отношению к myPage, а не System.Web.UI.Page, препятствуют правильной установке заголовка в директиве @ Page?

Я понимаю, что могу просто программно установить заголовки страниц с помощью методов Page_Load на каждой странице, но я бы предпочел сделать это в директивах @ Page в файлах .aspx.

Это очень странная и неприятная проблема, и я в растерянности!

Спасибо!!!


person wilsoniya    schedule 29.01.2009    source источник


Ответы (3)


Благодарю всех за помощь; Я нашел решение. Проблема заключалась в том, что у класса myPage было свойство для Title, но в части Set свойства не передавались изменения в Page.Title, как должно было быть. .

Изменение одной строки устранило мою проблему :)

person wilsoniya    schedule 30.01.2009

Какие методы есть на вашей базовой странице (myPage.vb).

Если вы переопределяете какой-либо из методов по умолчанию, вызываете ли вы базовые версии этих страниц?

в C # у меня было бы что-то вроде этого:

protected override void OnInit(EventArgs e)
{
    // Do my custom processing.

    // Don't forget to call base OnInit here:
    base.OnInit(e);
}

Если вы не вызовете эти методы, события, которые происходят в них за вас (например, подключение заголовка главной страницы), не сработают.

person Zhaph - Ben Duguid    schedule 30.01.2009
comment
Хорошее предложение. Я действительно это проверил, и класс myPage не отменяет ни один из методов класса Page - он только добавляет функциональность. Как ни странно, я создал пустой дочерний элемент Page и унаследовал от него тестовый класс, и все работало нормально. Должна быть проблема с myPage ... - person wilsoniya; 30.01.2009

У меня очень похожая на вас установка. У меня есть страницы содержимого, унаследованные от настраиваемой базовой страницы, которая сама наследуется от страницы. У меня нет проблем с заголовком, установленным в aspx и отображаемым в браузере. Единственное различие, которое я вижу между моим кодом и вашим, заключается в том, что моя главная страница имеет свойство autoeventwireup, тогда как ваша главная страница не имеет, а также ваша главная страница имеет свойство, называемое codefile, а у меня есть фоновый код.

Страница содержания:

<%@ Page Title="Login to Application X" Language="vb" AutoEventWireup="false" MasterPageFile="~/masterpages/mymasterpage.Master"
    CodeBehind="login.aspx.vb" Inherits=".login" %>

Главная страница:

<%@ Master Language="VB" AutoEventWireup="false" CodeBehind="mymasterpage.master.vb"
    Inherits=".mymasterpage" %>
person Dan Appleyard    schedule 29.01.2009
comment
Спасибо за ответ, Дэн. Я попытался добавить AutoEventWireup = false на свою главную страницу, но безрезультатно. Что касается выделенного кода и файла кода, очевидно, что файл кода имеет отношение к изменениям, внесенным в .NET 2.0: ddj.com/windows / 187202007 - person wilsoniya; 30.01.2009
comment
Я использую VB. В частности, я использую структуру .net 2.0 в рамках vs 2008 ide. - person Dan Appleyard; 30.01.2009