⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 skinnedcommunitycontrol.cs

📁 一个ASP.NET下的中文内容管理和社区系统
💻 CS
字号:
namespace ASPNET.StarterKit.Communities {


    using System;
    using System.Collections;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.ComponentModel;
    using System.IO;
    using System.Web.Security;
    using System.Web.Caching;


    //*********************************************************************
    //
    // SkinnedCommunityControl Class
    //
    // This is the base class of all controls in the ASP.NET Community
    // Starter Kit. This class enables pages, content, and controls to
    // load different skins.
    //
    //*********************************************************************

    [ParseChildren(true)]
    
    public abstract class SkinnedCommunityControl : WebControl, INamingContainer {

        protected UserInfo objUserInfo;
        protected PageInfo objPageInfo;
        protected SectionInfo objSectionInfo;
        protected CommunityInfo objCommunityInfo;
        
        string _skinName = null;
        string _skinFileName = null;


        //*********************************************************************
        //
        // SkinnedCommunityControl Constructor
        //
        // Retrieves the UserInfo, SectionInfo, and PageInfo from Context
        // making these objects automatically available to all controls
        // in the framework.
        //
        //*********************************************************************

        public SkinnedCommunityControl() {
			if (Context != null) {
				objUserInfo = (UserInfo)HttpContext.Current.Items[ "UserInfo" ];
				objPageInfo = (PageInfo)HttpContext.Current.Items[ "PageInfo" ];
				objSectionInfo = (SectionInfo)HttpContext.Current.Items[ "SectionInfo" ];
				objCommunityInfo = (CommunityInfo)HttpContext.Current.Items[ "CommunityInfo" ];
			}
        }


        //*********************************************************************
        //
        // Controls Property
        //
        // If you attempt to access a child control, make sure that the
        // CreateChildControls method has been called.
        //
        //*********************************************************************

        override public ControlCollection Controls {
            get {
                EnsureChildControls();
                return base.Controls;
            }
        }


        //*********************************************************************
        //
        // CreateChildControls Method
        //
        // Loads the skin for this control, calls the InitializeSkin
        // method of the derived control, and adds the skin to the controls
        // collection.
        //
        //*********************************************************************
        
        protected override void CreateChildControls() {
            Control skin;

            // Load the skin
            skin = LoadSkin();

            Controls.Add(skin);


            // Initialize the skin
            InitializeSkin(skin);



        }


        private string BuildSkinKey() {
            // Do we have a skin file?
            if (_skinFileName == null)
                throw new Exception("The SkinFileName property of the control must be set.");

            // Do we have a skin name?
            if (_skinName == null)
               _skinName = objSectionInfo.Skin;

            return ("/Communities/" + _skinName + "/Skins/" + SkinType + "/" + _skinFileName).ToLower();
        }


        private string BuildDefaultSkinKey() {
            // Do we have a skin file?
            if (_skinFileName == null)
                throw new Exception("The SkinFileName property of the control must be set.");


            return ("/Communities/Common/Themes/Default/Skins/" + SkinType + "/" + _skinFileName).ToLower();
        }




        //*********************************************************************
        //
        // LoadSkin Method
        //
        // Loads the skin for this control. If the skin cannot be loaded,
        // fails over to loading the default skin and marks this fact
        // in the Cache.
        //
        //*********************************************************************

        protected Control LoadSkin() {
            Control skin;
            
            // Build the skin key
            string skinKey = BuildSkinKey();
            
            // If skin doesn't exist, failover to Default
            if (Context.Cache[skinKey] != null) {
                skinKey = BuildDefaultSkinKey();           
                Context.Trace.Warn( "Failover: " + skinKey );
            }
            
            // Attempt to load the control.
            try {
                skin = Page.LoadControl( CommunityGlobals.AppPath + skinKey);

            }
            catch (FileNotFoundException fnfEx) {
                Context.Trace.Warn( "community error", "hard fail file not found: " + skinKey, fnfEx );

                // Add a marker we can check for to skip this in the future
                Context.Cache.Insert(skinKey, "fnf", 
                    new CacheDependency(Page.MapPath(CommunityGlobals.AppPath + skinKey)));
                
                // Load Default Skin                
                skinKey = BuildDefaultSkinKey();           
                try {               
                    skin = Page.LoadControl( CommunityGlobals.AppPath + skinKey);
                } catch {
                    throw new Exception( "Could not failover to " + CommunityGlobals.AppPath + skinKey );    
                }
            } 

            return skin;
        }




        private string BuildTemplateSkinKey(string skinFileName) {
            return ("/Communities/" + _skinName + "/Skins/TemplateSkins/" + skinFileName).ToLower();
        }


        private string BuildTemplateDefaultSkinKey(string skinFileName) {
            // Do we have a skin name?
            if (_skinName == null)
               _skinName = objSectionInfo.Skin;

            return ("/Communities/Common/Themes/Default/Skins/TemplateSkins/" + skinFileName).ToLower();
        }

        //*********************************************************************
        //
        // LoadTemplate Method
        //
        // Loads a Template skin. If the skin cannot be loaded, fails
        // over to the default skin and marks this fact in the Cache.
        //
        //*********************************************************************

        protected ITemplate LoadTemplate(string skinFileName) {
            ITemplate skin;

            string skinKey = BuildTemplateSkinKey(skinFileName);

            // If skin doesn't exist, failover to Default
            if (Context.Cache[skinKey] != null) {
                skinKey = BuildTemplateDefaultSkinKey(skinFileName);           
                Context.Trace.Warn( "template Failover: " + skinKey );
            }
            
            // Attempt to load the template.
            try {
                skin = Page.LoadTemplate( CommunityGlobals.AppPath + skinKey);

            } catch (FileNotFoundException fnfEx) {
                Context.Trace.Warn( "error", "template hard fail: " + skinKey, fnfEx );

                // Add a marker we can check for to skip this in the future
                Context.Cache.Insert(skinKey, "fnf", 
                    new CacheDependency(Page.MapPath(CommunityGlobals.AppPath + skinKey)));
                
                // Load Default Skin                
                skinKey = BuildTemplateDefaultSkinKey(skinFileName);           
                skin = Page.LoadTemplate( CommunityGlobals.AppPath + skinKey);
            } 
            return skin;
        }



        //*********************************************************************
        //
        // GetControl Method
        //
        // Retrieves a control from a skin. If the control cannot be
        // retrieved, throws an exception.
        //
        //*********************************************************************

        protected Control GetControl(Control skin, string controlID) {
            Control ctlFoundControl = skin.FindControl( controlID );
            if (ctlFoundControl == null)
                throw new Exception( "Could not find " + controlID + " in skin!" );
            return ctlFoundControl;
        }


        //*********************************************************************
        //
        // GetOptionalControl Method
        //
        // Retrieves a control from a skin. If the control cannot be
        // retrieved, DOES NOT throw an exception.
        //
        //*********************************************************************
        
        protected Control GetOptionalControl(Control skin, string controlID) {
            Control ctlFoundControl = skin.FindControl( controlID );
            return ctlFoundControl;
        }


        //*********************************************************************
        //
        // InitializeSkin Method
        //
        // This method must be implemented by all derived controls. The
        // inherited method retrieves all the controls that it needs from
        // the skin.
        //
        //*********************************************************************
        
        protected abstract void InitializeSkin(Control skin);




        //*********************************************************************
        //
        // SkinType Property
        //
        // The type of skin. For example Page, Control, Template
        //
        //*********************************************************************

        protected abstract string SkinType {
            get;
        }
        

        //*********************************************************************
        //
        // SkinName Property
        //
        // The name of the skin used with this control.
        // For example Default, Arc, Robotico.
        //
        //*********************************************************************

        public string SkinName {
            get { 
                return _skinName; 
            }
            set { 
                _skinName = value; 
            }
        }


        //*********************************************************************
        //
        // SkinFileName Property
        //
        // The file name of the skin. 
        // For example, Sections_Section.ascx, Sections_SectionBottom.ascx
        //
        //*********************************************************************

        public string SkinFileName {
            get { 
                return _skinFileName; 
            }
            set { 
                _skinFileName = value; 
            }
        }


    
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -