BlogEngine 页面设计-- 动态使用母版页
ASP.NET 的母版页让你能够轻松地创建和维护Web网站上一致的外观。你可以用母版页来定义整个网站的显示,或者网站的一组子页面。母版页含有所有的顶级HTML元素。这包括html、页头、正文和HTML窗体元素,因此内容页面不应该含有这些元素。头元素必须带有runat=server属性,而且在运行期间其头文本要用内容页面的标题文本来替换。
母版页包括内容占位符控件,以接纳来自内容页面的输出。 在BlogEngine中,所有的站位符控件都使用ID “cphBody”
<asp:ContentPlaceHolder ID="cphBody" runat="server" />
内容页面使用内容控件来指定要被插入母版页的内容区域。在BlogEngine的Default.aspx页面中,内容如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="default.aspx.cs" Inherits="_default" %>
<%@ Register Src="User controls/PostList.ascx" TagName="PostList" TagPrefix="uc1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="cphBody" Runat="Server">
<uc1:PostList ID="PostList1" runat="server" />
<blog:PostCalendar runat="server" ID="calendar"
EnableViewState="false"
ShowPostTitles="true"
BorderWidth="0"
NextPrevStyle-CssClass="header"
CssClass="calendar"
WeekendDayStyle-CssClass="weekend"
OtherMonthDayStyle-CssClass="other"
UseAccessibleHeader="true"
Visible="false"
Width="100%" />
</asp:Content>
在 <%@ Page Language="C#" > 中并没有通过设置MasterPageFile属性确定母版页。此时在vs设计器中打开页面时会显示错误
BlogEngine的default页继承自BlogEngine.Core.Web.Controls.BlogBasePage. 在页面的OnPreInit事件中,会通过程序设计的theme主题,自动选择当前页面的风格主题。
private string _Theme = BlogSettings.Instance.Theme;
/// <summary>
/// Assignes the selected theme to the pages.
/// </summary>
protected override void OnPreInit(EventArgs e)
{
if (Request.QueryString["theme"] != null)
_Theme = Request.QueryString["theme"];
MasterPageFile = Utils.RelativeWebRoot + "themes/" + _Theme + "/site.master";
base.OnPreInit(e);
.................
}。
这也是我们创建可动态改变网站风格的一种方法。 使用母版页创建可更改主题风格的原理就是,在页面的PreInit事件中,设置当前的 this.MasterPageFile = "××××.master";
母板页的值可以防止在session中,或者数据中,或者cookie中,在需要时候获取