我是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>
答案 0 :(得分:11)
我一直在使用嵌套的母版页,并且已经运行了类似的东西。从我看到你在Site.Master中有“一些页脚”的地方,问题所在,我在内容持有人标签中有内容。如果你试试这个
<asp:ContentPlaceHolder ID="holderFooter" runat="server"/>Some footer here
然后你应该能够看到页脚内容。
答案 1 :(得分:4)
我不确定我是否会使用母版页。如果它真的只是要进行日志记录,我将实现IHttpModule,在web.config中注册它,然后检查是否根据请求的路径进行日志记录。我认为母版页是关于内容而不是其他处理,例如日志记录。
请参阅MSDN上的IHttpModule walkthrough以获取示例 - 在BeginRequest处理程序中,您可能会检查请求路径并在匹配时正确记录。
如果我误解了你想要做的事情,那就道歉了。
答案 2 :(得分:2)
您应该将ContentPlaceHolder留空,因为它会被您实际网页中内容的内容所取代...
当您将“此处的一些页脚”文字移动到您的内容时,您将看到您的文字行:)
HTH
答案 3 :(得分:2)
此链接提供有关母版页的简单说明, http://waxtadpole.wordpress.com/2009/01/16/master-page-content-not-visible-visual-studio-2008/
问题是你在这个例子中使用子母版页是正确的 - 我会说母版页应该帮助你解决建立一致布局的问题,而不是是否应该进行日志记录。
答案 4 :(得分:1)
问题是,当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>
答案 5 :(得分:1)
如果唯一的原因是实施loggin,你为什么要乱用主页呢? 如果日志记录应该显示任何文本!?
你要么像Skeet提出的那样使用IHTTP处理程序..或者懒得一个人会有一个派生自网页的类,并在该类中实现日志记录,并使你的页面需要从那里进行日志记录...
前:
public class LoggingPage : : System.Web.UI.Page
{
public override void OnLoad()
{
// Do logging
}
}
partial class OneOfTheWebPages : LoggingPage
{
public void onLoad()
{
base.onLoad();
}
}
答案 6 :(得分:0)
我可能误解了您的问题 - 但是根据您发布的代码,页脚中没有任何。
在您的项目页面中,<asp:Content>
内容占位符的holderFooter
标记中没有任何内容。
答案 7 :(得分:0)
我有下一个继承树:
Site.master <-- Page1.aspx
<-- Project.master <-- Page2.aspx
我不知道为什么Page2只显示自己的内容和它的主页 - 项目。但不显示网站的内容(如Page1所做)为什么?我有什么要写的呢?