繁体   English   中英

使用嵌套的母版页

[英]Using nested Master Pages

我是ASP.NET的新手,请帮助我更多地了解MasterPages概念。

我有Site.master有常见的标题数据(css,meta等),中心表单(空白)和页脚(版权信息,联系我们链接等)。

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="Site.master.cs" Inherits="_SiteMaster" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="tagHead" runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="stylesheet" href="styles.css" type="text/css" />
</head>
<body>
    <form id="frmMaster" runat="server">
    <div>
        <asp:ContentPlaceHolder ID="holderForm" runat="server"></asp:ContentPlaceHolder>
        <asp:ContentPlaceHolder ID="holderFooter" runat="server">Some footer here</asp:ContentPlaceHolder>
    </div>
    </form>
</body>
</html>

并且我想将项目的第二个母版页用于子目录,该目录将包含用于记录的Page_Load上的SQL查询(整个站点不需要)。

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="Project.master.cs" Inherits="_ProjectMaster" MasterPageFile="~/Site.master" %>
<asp:Content ContentPlaceHolderID="holderForm" runat="server">
    <asp:ContentPlaceHolder ID="holderForm" runat="server" EnableViewState="true"></asp:ContentPlaceHolder>
</asp:Content>
<asp:Content ContentPlaceHolderID="holderFooter" runat="server">
    <asp:ContentPlaceHolder ID="holderFooter" runat="server" EnableViewState="true"></asp:ContentPlaceHolder>
</asp:Content>

但我有一个问题:没有显示页脚。

我的错误在哪里? 我是否正确使用第二个母版页作为记录的超级类?

项目页面如下所示:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" MasterPageFile="~/Project.master" %>
<asp:Content ContentPlaceHolderID="holderForm" runat="server">
    <p>Hello World!</p>
</asp:Content>
<asp:Content ContentPlaceHolderID="holderFooter" runat="Server">
    Some footer content
</asp:Content>

我一直在使用嵌套的母版页并运行类似的东西。 从我看到你在Site.Master中有“一些页脚”的地方,问题所在,我在内容持有人标签中有内容。 如果你试试这个

<asp:ContentPlaceHolder ID="holderFooter" runat="server"/>Some footer here

然后你应该能够看到页脚内容。

我不确定我是否会使用母版页。 如果它真的只是要进行日志记录,我将实现IHttpModule,在web.config中注册它,然后检查是否根据请求的路径进行日志记录。 我认为母版页是关于内容而不是其他处理,例如日志记录。

有关示例,请参阅MSDN上的IHttpModule演练 - 在BeginRequest处理程序中,您可能会检查请求路径并在匹配时正确记录。

如果我误解了你想要做的事,我会道歉。

您应该将ContentPlaceHolder留空,因为它会被您实际页面中内容的内容所取代...

当您将“Some footer here”文本移动到您的内容时,您将看到您的文本行:)

HTH

此链接在母版页上提供了简单的说明, http://waxtadpole.wordpress.com/2009/01/16/master-page-content-not-visible-visual-studio-2008/

问题是你在这个例子中使用子母版页是正确的 - 我会说母版页应该帮助你解决建立一致布局的问题,而不是是否应该进行日志记录。

问题是,当Default.aspx中放置的文本元素放在它们的相对内容占位符中时,它们将写在Site.master页面的占位符上,而不是Project.master(具有相同名称)的占位符。

您应该通过将不同的ContentPlaceHolderID分配给Project.master中的占位符来解决命名冲突(这意味着您还必须更改Default.aspx中的引用)。

这将是您的Project.master文件:

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="Project.master.cs" Inherits="_ProjectMaster" MasterPageFile="~/Site.master" %>
<asp:Content ContentPlaceHolderID="holderForm" runat="server">
    <!-- whatever... -->
    <asp:ContentPlaceHolder ID="holderFormInternal" runat="server" EnableViewState="true"></asp:ContentPlaceHolder>
    <!-- ... -->
</asp:Content>
<asp:Content ContentPlaceHolderID="holderFooter" runat="server">
    <asp:ContentPlaceHolder ID="holderFooterInternal" runat="server" EnableViewState="true"></asp:ContentPlaceHolder>
</asp:Content>

因此,使用Project母版页而不是全局Page.master的.aspx页面必须更改为:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" MasterPageFile="~/Project.master" %>
<asp:Content ContentPlaceHolderID="holderFormInternal" runat="server">
    <p>Hello World!</p>
</asp:Content>
<asp:Content ContentPlaceHolderID="holderFooterInternal" runat="Server">
</asp:Content>

如果唯一的原因是实现loggin为什么你会搞乱masterpages呢? 如果日志记录应该显示任何文本!?

你可以像Skeet提出的那样使用IHTTP处理程序。或者更懒的人会有一个派生自网页的类,并在该类中实现日志记录,并使你的页面需要从那里进行日志记录。

例如:

public class LoggingPage : : System.Web.UI.Page
{
  public override void OnLoad()
{
// Do logging
}
}

partial class OneOfTheWebPages : LoggingPage
{
 public void onLoad()
{
base.onLoad();
}
}

我可能会误解你的问题-但是从您发布的代码,没有页脚任何东西。

在Project页面中, holderFooter内容占位符的<asp:Content>标记中没有任何内容。

我有下一个继承树:

Site.master <-- Page1.aspx
<-- Project.master <-- Page2.aspx

我不知道为什么Page2只显示自己的内容和它的主页 - 项目。 但不显示网站的内容(如Page1所做)为什么? 我有什么要写的呢?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM