使用 ConfigurationSection 创建自定义配置节
1.创建自定义配置节处理程序
namespace BlogEngine.Core.Providers
{
  /// <summary>
  /// A configuration section for web.config.
  /// </summary>
  /// <remarks>
  /// In the config section you can specify the provider you
  /// want to use for BlogEngine.NET.
  /// </remarks>
  public class BlogProviderSection : ConfigurationSection
  {
    /// <summary>
    /// A collection of registered providers.
    /// </summary>
    [ConfigurationProperty("providers")]
    public ProviderSettingsCollection Providers
    {
      get { return (ProviderSettingsCollection)base["providers"]; }
    }
    /// <summary>
    /// The name of the default provider
    /// </summary>
    [StringValidator(MinLength = 1)]
    [ConfigurationProperty("defaultProvider", DefaultValue = "XmlBlogProvider")]
    public string DefaultProvider
    {
      get { return (string)base["defaultProvider"]; }
      set { base["defaultProvider"] = value; }
    }
  }
2.向 ASP.NET 配置文件添加自定义节处理程序
  (将 sectionGroup 元素和 section 元素添加到 Web.config 文件的 configSections 元素中。正是此声明将自定义节处理程序与节名关联。将 section 元素嵌套在 sectionGroup 中是可选的,但是建议这样做,以便更好地组织配置数据。)
  <configSections>
    <sectionGroup name="BlogEngine">
      <section name="blogProvider" requirePermission="false" type="BlogEngine.Core.Providers.BlogProviderSection, BlogEngine.Core" allowDefinition="MachineToApplication" restartOnExternalChanges="true"/>
    </sectionGroup>
  </configSections>
  <BlogEngine>
    <blogProvider defaultProvider="XmlBlogProvider">
      <providers>
        <add name="XmlBlogProvider" type="BlogEngine.Core.Providers.XmlBlogProvider, BlogEngine.Core"/>
        <add name="MSSQLBlogProvider" type="BlogEngine.Core.Providers.MSSQLBlogProvider, BlogEngine.Core"/>
      </providers>
    </blogProvider>
  </BlogEngine>
posted @ 2009-01-06 17:01 OctoberOne 阅读(250) 评论(1) 编辑

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

posted @ 2009-01-06 17:00 OctoberOne 阅读(652) 评论(0) 编辑
private static Regex _Regex = new Regex("<[^>]*>", RegexOptions.Compiled);

  private static string StripHtml(string html)
  {
   if (string.IsNullOrEmpty(html))
    return string.Empty;

   return _Regex.Replace(html, string.Empty);
  }

 public string Body
  {
   get
   {
    string body = Post.Content;
    if (ShowExcerpt)
    {
     string link = " <a href=\"" + Post.RelativeLink.ToString() + "\">[" + (Page as BlogBasePage).Translate("more") + "]</a>";

     if (!string.IsNullOrEmpty(Post.Description))
     {
      body = Post.Description + "." + link;
     }
     else
     {
      body = StripHtml(Post.Content);
      if (body.Length > 300)
       body = body.Substring(0, 300) + "..." + link;
     }
    }

    ServingEventArgs arg = new ServingEventArgs(body, this.Location);
    Post.OnServing(Post, arg);

    if (arg.Cancel)
    {
     if (arg.Location == ServingLocation.SinglePost)
     {
      Response.Redirect("~/error404.aspx", true);
     }
     else
     {
      this.Visible = false;
     }
    }

    return arg.Body;
   }
  }

posted @ 2009-01-06 16:59 OctoberOne 阅读(33) 评论(0) 编辑