📄 scriptcontrolbase.cs
字号:
// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Permissive License.
// See http://www.microsoft.com/resources/sharedsource/licensingbasics/sharedsourcelicenses.mspx.
// All other rights reserved.
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Web.Script.Serialization;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Collections.Specialized;
using System.Diagnostics;
using System.Reflection;
using System.Security;
namespace AjaxControlToolkit
{
/// <summary>
/// ScriptControl is used to define complex custom controls which support ASP.NET AJAX script extensions
/// </summary>
[ClientScriptResource(null, Constants.BaseScriptResourceName)]
public class ScriptControlBase : ScriptControl, INamingContainer, IControlResolver, IPostBackDataHandler, ICallbackEventHandler, IClientStateManager
{
#region [ Fields ]
private ScriptManager _scriptManager;
private bool _enableClientState;
private string _cachedClientStateFieldID;
private string _callbackArgument;
private string _tagName;
private HtmlTextWriterTag _tagKey;
private bool _renderingScript;
#endregion
#region [ Constructor ]
/// <summary>
/// Initializes a new ScriptControl
/// </summary>
/// <param name="tag"></param>
public ScriptControlBase(HtmlTextWriterTag tag)
: this(false, tag)
{
}
/// <summary>
/// Initializes a new ScriptControl
/// </summary>
protected ScriptControlBase()
: this(false)
{
}
/// <summary>
/// Initializes a new ScriptControl
/// </summary>
/// <param name="tag"></param>
protected ScriptControlBase(string tag)
: this(false, tag)
{
}
/// <summary>
/// Initializes a new ScriptControl
/// </summary>
/// <param name="enableClientState"></param>
protected ScriptControlBase(bool enableClientState)
{
_enableClientState = enableClientState;
}
/// <summary>
/// Initializes a new ScriptControl
/// </summary>
/// <param name="enableClientState"></param>
/// <param name="tag"></param>
protected ScriptControlBase(bool enableClientState, HtmlTextWriterTag tag)
{
_tagKey = tag;
_enableClientState = enableClientState;
}
/// <summary>
/// Initializes a new ScriptControl
/// </summary>
/// <param name="enableClientState"></param>
/// <param name="tag"></param>
protected ScriptControlBase(bool enableClientState, string tag)
{
_tagKey = HtmlTextWriterTag.Unknown;
_tagName = tag;
_enableClientState = enableClientState;
}
#endregion
#region [ Properties ]
/// <summary>
/// For debugging - setting this causes the extender to load the specified script instead of the one out of the resources. This
/// lets you set breakpoints and modify the script without rebuilding, etc.
/// </summary>
/// <remarks>
/// Note to inheritors: If you do not wish the user to set the script path, override script path and throw a NotSupportedException on set. Also decorate the ScriptPath attribute with a [Browsable(false)] and [EditorBrowsableState(EditorBrowsableState.Never)]
/// </remarks>
[DefaultValue("")]
public virtual string ScriptPath
{
get { return (string)(ViewState["ScriptPath"] ?? string.Empty); }
set { ViewState["ScriptPath"] = value; }
}
/// <summary>
/// The script type to use for the ScriptControl
/// </summary>
protected virtual string ClientControlType
{
get
{
ClientScriptResourceAttribute attr = (ClientScriptResourceAttribute)TypeDescriptor.GetAttributes(this)[typeof(ClientScriptResourceAttribute)];
return attr.ComponentType;
}
}
/// <summary>
/// Property for determining if script rendering is currently underway. This is used to determine
/// if Script or markup is being rendered.
/// </summary>
protected bool IsRenderingScript
{
get
{
return _renderingScript;
}
}
/// <summary>
/// Whether this control supports ClientState
/// </summary>
/// <remarks>
/// Note to inheritors: You should either pass true to the constructor for enableClientState or override this property to enable client state for inherited controls.
/// </remarks>
protected virtual bool SupportsClientState
{
get { return _enableClientState; }
}
/// <summary>
/// Gets the ScriptManager for the page
/// </summary>
protected ScriptManager ScriptManager
{
get
{
EnsureScriptManager();
return _scriptManager;
}
}
/// <summary>
/// The ID of the ClientState field
/// </summary>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1706:ShortAcronymsShouldBeUppercase", Justification = "Following ASP.NET AJAX pattern")]
protected string ClientStateFieldID
{
get
{
if (_cachedClientStateFieldID == null)
{
_cachedClientStateFieldID = ClientID + "_ClientState";
}
return _cachedClientStateFieldID;
}
}
/// <summary>
/// Gets the tag key used when rendering the outer wrapper element for this user control
/// </summary>
protected override HtmlTextWriterTag TagKey
{
get { return _tagKey; }
}
/// <summary>
/// Gets the tag name used when rendering the outer wrapper element for this user control
/// </summary>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1308:NormalizeStringsToUppercase", Justification="Avoiding possibly breaking change")]
protected override string TagName
{
get
{
if (_tagName == null && TagKey != HtmlTextWriterTag.Unknown)
{
_tagName = Enum.Format(typeof(HtmlTextWriterTag), TagKey, "G").ToLower(CultureInfo.InvariantCulture);
}
return _tagName;
}
}
#endregion
#region [ Methods ]
/// <summary>
/// Ensures a ScriptManager exists on the Page for this Control
/// </summary>
private void EnsureScriptManager()
{
if (_scriptManager == null)
{
_scriptManager = ScriptManager.GetCurrent(Page);
if (_scriptManager == null)
{
throw new HttpException(Resources.E_NoScriptManager);
}
}
}
/// <summary>
/// Finds a control reference by its ID
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public override Control FindControl(string id)
{
Control control = base.FindControl(id);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -