Установка заголовка страницы из директивы @ Page в ASP.NET с использованием главных страниц - PullRequest
2 голосов
/ 30 января 2009

Я использую главные страницы и не могу установить заголовки страниц из директивы @ 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». но вместо этого вы увидите «без названия» в соответствии с главной страницей. Методом проб и ошибок я изменил класс 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.

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

Спасибо !!!

Ответы [ 3 ]

2 голосов
/ 30 января 2009

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

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

1 голос
/ 30 января 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);
}

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

0 голосов
/ 30 января 2009

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

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

<%@ 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" %>
...