📄 desktopcontrols.cs
字号:
using System;
using System.IO;
using System.ComponentModel;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace MyStarterKit.Portal.Web {
//*********************************************************************
//
// PortalModuleControl Class
//
// The PortalModuleControl class defines a custom base class inherited by all
// desktop portal modules within the Portal.
//
// The PortalModuleControl class defines portal specific properties
// that are used by the portal framework to correctly display portal modules
//
//*********************************************************************
/// <summary>
/// 门户站点用户控件基类
/// </summary>
public class PortalModuleControl : UserControl
{
// Private field variables
// 私有变量
private ModuleSettings _moduleConfiguration; //模块设置信息
private int _isEditable = 0; //
private int _portalId = 0; //所属门户站点Id
private Hashtable _settings; //
#region 公共属性
// Public property accessors
/// <summary>
/// 模块Id
/// </summary>
[Browsable(false),DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public int ModuleId
{
get
{
return (int) _moduleConfiguration.ModuleId;
}
}
/// <summary>
/// 所属门户站点Id
/// </summary>
[Browsable(false),DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public int PortalId
{
get
{
return _portalId;
}
set
{
_portalId = value;
}
}
/// <summary>
/// 模块是否处于编辑模式的标记属性(true:可编辑/false:不可编辑)
/// </summary>
[Browsable(false),DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public bool IsEditable
{
get
{
// Perform tri-state switch check to avoid having to perform a security
// role lookup on every property access (instead caching the result)
if (_isEditable == 0)
{
// Obtain PortalSettings from Current Context
PortalSettings portalSettings = (PortalSettings) HttpContext.Current.Items["PortalSettings"];
if (portalSettings.AlwaysShowEditButton == true || PortalSecurity.IsInRoles(_moduleConfiguration.AuthorizedEditRoles))
{
_isEditable = 1;
}
else
{
_isEditable = 2;
}
}
return (_isEditable == 1);
}
}
/// <summary>
/// 模块设置信息
/// </summary>
[Browsable(false),DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public ModuleSettings ModuleConfiguration
{
get
{
return _moduleConfiguration;
}
set
{
_moduleConfiguration = value;
}
}
/// <summary>
/// 获取指定用户模块的设置信息(为XML/XSL模板和图片模板时设置XML/XSL文件和图片的地址)
/// </summary>
[Browsable(false),DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public Hashtable Settings
{
get
{
if (_settings == null)
{
_settings = Configuration.GetModuleSettings(ModuleId);
}
return _settings;
}
}
#endregion
}
//*********************************************************************
//
// CachedPortalModuleControl Class
//
// The CachedPortalModuleControl class is a custom server control that
// the Portal framework uses to optionally enable output caching of
// individual portal module's content.
//
// If a CacheTime value greater than 0 seconds is specified within the
// ASPNET.StarterKit.Portal.Config configuration file, then the CachePortalModuleControl
// will automatically capture the output of the Portal Module User Control
// it wraps. It will then store this captured output within the ASP.NET
// Cache API. On subsequent requests (either by the same browser -- or
// by other browsers visiting the same portal page), the CachedPortalModuleControl
// will attempt to resolve the cached output out of the cache.
//
// Note: In the event that previously cached output can't be found in the
// ASP.NET Cache, the CachedPortalModuleControl will automatically instatiate
// the appropriate portal module user control and place it within the
// portal page.
//
//*********************************************************************
public class CachedPortalModuleControl : Control
{
// Private field variables
private ModuleSettings _moduleConfiguration;
private String _cachedOutput = "";
private int _portalId = 0;
// Public property accessors
public ModuleSettings ModuleConfiguration
{
get {
return _moduleConfiguration;
}
set {
_moduleConfiguration = value;
}
}
public int ModuleId
{
get {
return _moduleConfiguration.ModuleId;
}
}
public int PortalId
{
get {
return _portalId;
}
set {
_portalId = value;
}
}
//*********************************************************************
//
// CacheKey Property
//
// The CacheKey property is used to calculate a "unique" cache key
// entry to be used to store/retrieve the portal module's content
// from the ASP.NET Cache.
//
//*********************************************************************
public String CacheKey
{
get {
return "Key:" + this.GetType().ToString() + this.ModuleId + PortalSecurity.IsInRoles(_moduleConfiguration.AuthorizedEditRoles);
}
}
//*********************************************************************
//
// CreateChildControls Method
//
// The CreateChildControls method is called when the ASP.NET Page Framework
// determines that it is time to instantiate a server control.
//
// The CachedPortalModuleControl control overrides this method and attempts
// to resolve any previously cached output of the portal module from the
// ASP.NET cache.
//
// If it doesn't find cached output from a previous request, then the
// CachedPortalModuleControl will instantiate and add the portal module's
// User Control instance into the page tree.
//
//*********************************************************************
protected override void CreateChildControls() {
// Attempt to resolve previously cached content from the ASP.NET Cache
if (_moduleConfiguration.CacheTime > 0) {
_cachedOutput = (String) Context.Cache[CacheKey];
}
// If no cached content is found, then instantiate and add the portal
// module user control into the portal's page server control tree
if (_cachedOutput == null) {
base.CreateChildControls();
PortalModuleControl module = (PortalModuleControl) Page.LoadControl(_moduleConfiguration.DesktopSrc);
module.ModuleConfiguration = this.ModuleConfiguration;
module.PortalId = this.PortalId;
this.Controls.Add(module);
}
}
//*********************************************************************
//
// Render Method
//
// The Render method is called when the ASP.NET Page Framework
// determines that it is time to render content into the page output stream.
//
// The CachedPortalModuleControl control overrides this method and captures
// the output generated by the portal module user control. It then
// adds this content into the ASP.NET Cache for future requests.
//
//*********************************************************************
protected override void Render(HtmlTextWriter output) {
// If no caching is specified, render the child tree and return
if (_moduleConfiguration.CacheTime == 0) {
base.Render(output);
return;
}
// If no cached output was found from a previous request, render
// child controls into a TextWriter, and then cache the results
// in the ASP.NET Cache for future requests.
if (_cachedOutput == null) {
TextWriter tempWriter = new StringWriter();
base.Render(new HtmlTextWriter(tempWriter));
_cachedOutput = tempWriter.ToString();
Context.Cache.Insert(CacheKey, _cachedOutput, null, DateTime.Now.AddSeconds(_moduleConfiguration.CacheTime), TimeSpan.Zero);
}
// Output the user control's content
output.Write(_cachedOutput);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -