2010年2月24日星期三

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中,在需要时候获取
发表评论