Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / xsp / System / Web / Extensions / ui / AsyncPostBackTrigger.cs / 1 / 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
- HttpModuleActionCollection.cs
- EventDriven.cs
- SID.cs
- RpcResponse.cs
- DictionaryContent.cs
- UnaryOperationBinder.cs
- SynchronizingStream.cs
- StreamInfo.cs
- RoleGroupCollection.cs
- SynchronizedDispatch.cs
- Token.cs
- DrawListViewColumnHeaderEventArgs.cs
- DataSetUtil.cs
- DesignTimeVisibleAttribute.cs
- XmlSchemaAttribute.cs
- SqlConnectionString.cs
- HtmlShimManager.cs
- Encoding.cs
- DefaultValueTypeConverter.cs
- MediaContext.cs
- GlyphingCache.cs
- FactoryMaker.cs
- ScrollEventArgs.cs
- PackageRelationshipSelector.cs
- ScrollViewer.cs
- ImageSource.cs
- GenericWebPart.cs
- TabControlEvent.cs
- JsonStringDataContract.cs
- TextEndOfSegment.cs
- InputLanguageEventArgs.cs
- UpdateRecord.cs
- GenerateHelper.cs
- SafeRightsManagementPubHandle.cs
- DataSourceControlBuilder.cs
- LassoHelper.cs
- TypeDescriptionProviderAttribute.cs
- MasterPageCodeDomTreeGenerator.cs
- XmlAnyElementAttribute.cs
- EntityProviderServices.cs
- QuaternionConverter.cs
- ComPlusInstanceContextInitializer.cs
- _BaseOverlappedAsyncResult.cs
- ChangePassword.cs
- RedirectionProxy.cs
- Msec.cs
- ScriptServiceAttribute.cs
- VerticalAlignConverter.cs
- cache.cs
- ZipIOExtraFieldElement.cs
- EntitySqlQueryCacheKey.cs
- DataGridViewRowsRemovedEventArgs.cs
- AssemblyNameProxy.cs
- DNS.cs
- XmlSchemaSimpleType.cs
- FixedSOMLineRanges.cs
- XmlElementAttribute.cs
- Util.cs
- CommonXSendMessage.cs
- DeviceOverridableAttribute.cs
- SiteMapHierarchicalDataSourceView.cs
- TextRangeProviderWrapper.cs
- SafeArrayTypeMismatchException.cs
- SimpleLine.cs
- LinqDataSourceContextEventArgs.cs
- ReceiveDesigner.xaml.cs
- RegexCharClass.cs
- AttributeEmitter.cs
- MapPathBasedVirtualPathProvider.cs
- FixedPosition.cs
- XmlAnyElementAttributes.cs
- WebPageTraceListener.cs
- ExceptionUtil.cs
- FileUtil.cs
- PEFileEvidenceFactory.cs
- EntitySqlQueryState.cs
- DataGridColumnHeadersPresenter.cs
- ItemContainerGenerator.cs
- BatchWriter.cs
- StringUtil.cs
- Vector3DKeyFrameCollection.cs
- JoinTreeNode.cs
- ProcessProtocolHandler.cs
- PermissionToken.cs
- ClientApiGenerator.cs
- HostingMessageProperty.cs
- OperandQuery.cs
- DaylightTime.cs
- EndpointDispatcherTable.cs
- SqlCharStream.cs
- GlobalItem.cs
- DateTimeConstantAttribute.cs
- Touch.cs
- XpsResource.cs
- CoTaskMemHandle.cs
- ResourceDescriptionAttribute.cs
- SymbolDocumentInfo.cs
- Rotation3DAnimationUsingKeyFrames.cs
- FillRuleValidation.cs
- Guid.cs