Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / xsp / System / Web / Extensions / ui / AsyncPostBackTrigger.cs / 3 / AsyncPostBackTrigger.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Web.UI {
using System;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Reflection;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.Resources;
using System.Web.Util;
[
AspNetHostingPermission(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal),
AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)
]
public class AsyncPostBackTrigger : UpdatePanelControlTrigger {
private IScriptManagerInternal _scriptManager;
private Control _associatedControl;
private static MethodInfo _eventHandler;
private bool _eventHandled;
private string _eventName;
public AsyncPostBackTrigger() {
}
internal AsyncPostBackTrigger(IScriptManagerInternal scriptManager) {
_scriptManager = scriptManager;
}
private static MethodInfo EventHandler {
get {
if (_eventHandler == null) {
_eventHandler = typeof(AsyncPostBackTrigger).GetMethod("OnEvent");
}
return _eventHandler;
}
}
[
SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "ID"),
TypeConverter("System.Web.UI.Design.AsyncPostBackTriggerControlIDConverter, " +
AssemblyRef.SystemWebExtensionsDesign)
]
public new string ControlID {
get {
return base.ControlID;
}
set {
base.ControlID = value;
}
}
[
DefaultValue(""),
Category("Behavior"),
ResourceDescription("AsyncPostBackTrigger_EventName"),
TypeConverter("System.Web.UI.Design.AsyncPostBackTriggerEventNameConverter, " +
AssemblyRef.SystemWebExtensionsDesign),
]
public string EventName {
get {
if (_eventName == null) {
return String.Empty;
}
return _eventName;
}
set {
_eventName = value;
}
}
internal IScriptManagerInternal ScriptManager {
get {
if (_scriptManager == null) {
Page page = Owner.Page;
if (page == null) {
throw new InvalidOperationException(AtlasWeb.Common_PageCannotBeNull);
}
_scriptManager = UI.ScriptManager.GetCurrent(page);
if (_scriptManager == null) {
throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.Common_ScriptManagerRequired, Owner.ID));
}
}
return _scriptManager;
}
}
protected internal override void Initialize() {
base.Initialize();
_associatedControl = FindTargetControl(true);
ScriptManager.RegisterAsyncPostBackControl(_associatedControl);
string eventName = EventName;
if (eventName.Length != 0) {
// If EventName is specified, attach our event handler to it
EventInfo eventInfo = _associatedControl.GetType().GetEvent(eventName, BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public);
if (eventInfo == null) {
throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.AsyncPostBackTrigger_CannotFindEvent, eventName, ControlID, Owner.ID));
}
MethodInfo handlerMethod = eventInfo.EventHandlerType.GetMethod("Invoke");
ParameterInfo[] parameters = handlerMethod.GetParameters();
if (!handlerMethod.ReturnType.Equals(typeof(void)) ||
(parameters.Length != 2) ||
(typeof(EventArgs).IsAssignableFrom(parameters[1].ParameterType) == false)) {
throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.AsyncPostBackTrigger_InvalidEvent, eventName, ControlID, Owner.ID));
}
Delegate handler = Delegate.CreateDelegate(eventInfo.EventHandlerType, this, EventHandler);
eventInfo.AddEventHandler(_associatedControl, handler);
}
}
protected internal override bool HasTriggered() {
if (!String.IsNullOrEmpty(EventName)) {
// If EventName is specified we are triggered if our event was raised
return _eventHandled;
}
else {
// If EventName is not specified, check if the control that caused the
// postback either has the exact UniqueID we're looking for, or at least
// begins with it.
string sourceElement = ScriptManager.AsyncPostBackSourceElementID;
return
(sourceElement == _associatedControl.UniqueID) ||
(sourceElement.StartsWith(_associatedControl.UniqueID + "$", StringComparison.Ordinal));
}
}
// DevDiv Bugs 127369: This method should be private and the reflection lookup should assert reflection permission
// so the private reflection works in medium trust.
// However, ASP.NET AJAX 1.0 was released with this method public. Since it would be a breaking change to make it private
// now, it was decided to leave it as is.
[SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers",
Justification="TODO: This will be fixed in fc_serverfx")]
public void OnEvent(object sender, EventArgs e) {
_eventHandled = true;
}
[SuppressMessage("Microsoft.Security", "CA2123:OverrideLinkDemandsShouldBeIdenticalToBase")]
public override string ToString() {
if (String.IsNullOrEmpty(ControlID)) {
return "AsyncPostBack";
}
else {
return "AsyncPostBack: " + ControlID +
(String.IsNullOrEmpty(EventName) ? String.Empty : ("." + EventName));
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Web.UI {
using System;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Reflection;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.Resources;
using System.Web.Util;
[
AspNetHostingPermission(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal),
AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)
]
public class AsyncPostBackTrigger : UpdatePanelControlTrigger {
private IScriptManagerInternal _scriptManager;
private Control _associatedControl;
private static MethodInfo _eventHandler;
private bool _eventHandled;
private string _eventName;
public AsyncPostBackTrigger() {
}
internal AsyncPostBackTrigger(IScriptManagerInternal scriptManager) {
_scriptManager = scriptManager;
}
private static MethodInfo EventHandler {
get {
if (_eventHandler == null) {
_eventHandler = typeof(AsyncPostBackTrigger).GetMethod("OnEvent");
}
return _eventHandler;
}
}
[
SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "ID"),
TypeConverter("System.Web.UI.Design.AsyncPostBackTriggerControlIDConverter, " +
AssemblyRef.SystemWebExtensionsDesign)
]
public new string ControlID {
get {
return base.ControlID;
}
set {
base.ControlID = value;
}
}
[
DefaultValue(""),
Category("Behavior"),
ResourceDescription("AsyncPostBackTrigger_EventName"),
TypeConverter("System.Web.UI.Design.AsyncPostBackTriggerEventNameConverter, " +
AssemblyRef.SystemWebExtensionsDesign),
]
public string EventName {
get {
if (_eventName == null) {
return String.Empty;
}
return _eventName;
}
set {
_eventName = value;
}
}
internal IScriptManagerInternal ScriptManager {
get {
if (_scriptManager == null) {
Page page = Owner.Page;
if (page == null) {
throw new InvalidOperationException(AtlasWeb.Common_PageCannotBeNull);
}
_scriptManager = UI.ScriptManager.GetCurrent(page);
if (_scriptManager == null) {
throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.Common_ScriptManagerRequired, Owner.ID));
}
}
return _scriptManager;
}
}
protected internal override void Initialize() {
base.Initialize();
_associatedControl = FindTargetControl(true);
ScriptManager.RegisterAsyncPostBackControl(_associatedControl);
string eventName = EventName;
if (eventName.Length != 0) {
// If EventName is specified, attach our event handler to it
EventInfo eventInfo = _associatedControl.GetType().GetEvent(eventName, BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public);
if (eventInfo == null) {
throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.AsyncPostBackTrigger_CannotFindEvent, eventName, ControlID, Owner.ID));
}
MethodInfo handlerMethod = eventInfo.EventHandlerType.GetMethod("Invoke");
ParameterInfo[] parameters = handlerMethod.GetParameters();
if (!handlerMethod.ReturnType.Equals(typeof(void)) ||
(parameters.Length != 2) ||
(typeof(EventArgs).IsAssignableFrom(parameters[1].ParameterType) == false)) {
throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.AsyncPostBackTrigger_InvalidEvent, eventName, ControlID, Owner.ID));
}
Delegate handler = Delegate.CreateDelegate(eventInfo.EventHandlerType, this, EventHandler);
eventInfo.AddEventHandler(_associatedControl, handler);
}
}
protected internal override bool HasTriggered() {
if (!String.IsNullOrEmpty(EventName)) {
// If EventName is specified we are triggered if our event was raised
return _eventHandled;
}
else {
// If EventName is not specified, check if the control that caused the
// postback either has the exact UniqueID we're looking for, or at least
// begins with it.
string sourceElement = ScriptManager.AsyncPostBackSourceElementID;
return
(sourceElement == _associatedControl.UniqueID) ||
(sourceElement.StartsWith(_associatedControl.UniqueID + "$", StringComparison.Ordinal));
}
}
// DevDiv Bugs 127369: This method should be private and the reflection lookup should assert reflection permission
// so the private reflection works in medium trust.
// However, ASP.NET AJAX 1.0 was released with this method public. Since it would be a breaking change to make it private
// now, it was decided to leave it as is.
[SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers",
Justification="TODO: This will be fixed in fc_serverfx")]
public void OnEvent(object sender, EventArgs e) {
_eventHandled = true;
}
[SuppressMessage("Microsoft.Security", "CA2123:OverrideLinkDemandsShouldBeIdenticalToBase")]
public override string ToString() {
if (String.IsNullOrEmpty(ControlID)) {
return "AsyncPostBack";
}
else {
return "AsyncPostBack: " + ControlID +
(String.IsNullOrEmpty(EventName) ? String.Empty : ("." + EventName));
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CheckBoxField.cs
- XPathNodeList.cs
- SqlGenericUtil.cs
- DataGridViewSelectedCellCollection.cs
- FormViewDeletedEventArgs.cs
- StyleTypedPropertyAttribute.cs
- NamespaceInfo.cs
- RegexParser.cs
- VsPropertyGrid.cs
- PublisherIdentityPermission.cs
- ConfigurationSectionCollection.cs
- ResolveCriteria11.cs
- DerivedKeyCachingSecurityTokenSerializer.cs
- VersionedStream.cs
- SerialReceived.cs
- DateTimeConverter.cs
- RIPEMD160Managed.cs
- PromptEventArgs.cs
- RelatedPropertyManager.cs
- IInstanceContextProvider.cs
- TypedElement.cs
- PrePrepareMethodAttribute.cs
- XmlUrlResolver.cs
- MediaSystem.cs
- AttributeUsageAttribute.cs
- SHA256Managed.cs
- XmlReader.cs
- XmlLangPropertyAttribute.cs
- While.cs
- remotingproxy.cs
- GridViewRowPresenterBase.cs
- BamlWriter.cs
- SchemaAttDef.cs
- SQLMoney.cs
- Int16AnimationBase.cs
- DataSourceCacheDurationConverter.cs
- FunctionQuery.cs
- HttpPostClientProtocol.cs
- ClassHandlersStore.cs
- NetSectionGroup.cs
- XamlTemplateSerializer.cs
- _ListenerResponseStream.cs
- WindowsListViewGroupHelper.cs
- StructuralType.cs
- HttpCapabilitiesSectionHandler.cs
- ConfigLoader.cs
- IdentityHolder.cs
- CompilerError.cs
- EncoderNLS.cs
- InfoCardConstants.cs
- GeometryCombineModeValidation.cs
- NativeMethods.cs
- ToolStripButton.cs
- EdgeProfileValidation.cs
- PolyLineSegmentFigureLogic.cs
- BinaryConverter.cs
- XmlDataSource.cs
- RootAction.cs
- SQLUtility.cs
- FusionWrap.cs
- OleDbParameterCollection.cs
- X509Extension.cs
- LinearKeyFrames.cs
- ViewBase.cs
- MetadataImporter.cs
- UpdateExpressionVisitor.cs
- ExpressionNode.cs
- AddInAttribute.cs
- OuterGlowBitmapEffect.cs
- remotingproxy.cs
- MetadataArtifactLoaderFile.cs
- TreeSet.cs
- IncrementalReadDecoders.cs
- Symbol.cs
- ClientBuildManagerCallback.cs
- IERequestCache.cs
- ValidationError.cs
- DrawingServices.cs
- ProfileProvider.cs
- ModelVisual3D.cs
- PtsPage.cs
- DataSourceCache.cs
- MultipleViewProviderWrapper.cs
- TailPinnedEventArgs.cs
- ByteArrayHelperWithString.cs
- Empty.cs
- Util.cs
- EntryWrittenEventArgs.cs
- PerformanceCounterManager.cs
- OLEDB_Enum.cs
- DataControlFieldHeaderCell.cs
- SubMenuStyle.cs
- GreenMethods.cs
- DecodeHelper.cs
- EntitySetDataBindingList.cs
- Connector.cs
- SponsorHelper.cs
- GlobalEventManager.cs
- MemberDescriptor.cs
- Comparer.cs