【问题标题】:Setting page title from @ Page directive in ASP.NET using master pages使用母版页在 ASP.NET 中从 @ Page 指令设置页面标题
【发布时间】:2010-10-04 08:34:08
【问题描述】:

我正在使用母版页,但无法从 @ 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 方法以编程方式设置页面标题,但我宁愿在 .aspx 文件中的 @Page 指令中进行设置。

这是一个非常奇怪和令人沮丧的问题,我很茫然!

谢谢!!!

【问题讨论】:

    标签: asp.net vb.net master-pages


    【解决方案1】:

    感谢大家的帮助;我找到了解决方案。问题是 myPage 类有一个 Title 属性,但在 Set 属性的部分中没有将更改传递给 Page.Title,因为它应该是.

    一行更改解决了我的问题:)

    【讨论】:

      【解决方案2】:

      您的基本页面 (myPage.vb) 中有哪些方法。

      如果您要覆盖任何默认方法,您是在调用这些页面的基本版本吗?

      在 C# 中我会有这样的东西:

      protected override void OnInit(EventArgs e)
      {
          // Do my custom processing.
      
          // Don't forget to call base OnInit here:
          base.OnInit(e);
      }
      

      如果您不调用这些方法,那么在它们中为您发生的事件(例如连接母版页的标题)将不会触发。

      【讨论】:

      • 好建议。我实际上检查了这一点,myPage 类没有覆盖任何 Page 类的方法——它只是添加了功能。有趣的是,我创建了 Page 的一个空子节点,并让测试类继承自它,一切正常。 myPage 肯定有问题...
      【解决方案3】:

      我的设置与您非常相似。我的内容页面继承自自定义基本页面,该页面本身继承自页面。我对在 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" %>
      

      【讨论】:

      • 感谢您的回复,丹。我尝试将 AutoEventWireup="false" 添加到我的母版页,但没有结果。关于代码隐藏与代码文件,显然代码文件与 .NET 2.0 中所做的更改有关:ddj.com/windows/187202007
      • 我正在使用 VB。具体来说,我在 vs 2008 ide 中使用 .net 2.0 框架。
      猜你喜欢
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多