Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / ndp / fx / src / xsp / System / Web / UI / WebControls / LoginView.cs / 3 / LoginView.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.UI.WebControls { using System.Collections; using System.ComponentModel; using System.Security.Permissions; using System.Security.Principal; using System.Web.Security; using System.Web.UI; ////// Renders exactly one of its templates, chosen by whether a user is logged in /// and the roles that contain the user. /// [ Bindable(false), ParseChildren(true), PersistChildren(false), Designer("System.Web.UI.Design.WebControls.LoginViewDesigner," + AssemblyRef.SystemDesign), DefaultProperty("CurrentView"), DefaultEvent("ViewChanged"), Themeable(true), ] [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] public class LoginView : Control, INamingContainer { private RoleGroupCollection _roleGroups; private ITemplate _loggedInTemplate; private ITemplate _anonymousTemplate; private int _templateIndex; private const int anonymousTemplateIndex = 0; private const int loggedInTemplateIndex = 1; private const int roleGroupStartingIndex = 2; private static readonly object EventViewChanging = new object(); private static readonly object EventViewChanged = new object(); ////// Template shown when no user is logged in. /// [ Browsable(false), DefaultValue(null), PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(typeof(LoginView)), ] public virtual ITemplate AnonymousTemplate { get { return _anonymousTemplate; } set { _anonymousTemplate = value; } } [ Browsable(true), ] public override bool EnableTheming { get { return base.EnableTheming; } set { base.EnableTheming = value; } } [ Browsable(true), ] public override string SkinID { get { return base.SkinID; } set { base.SkinID = value; } } ////// Copied from CompositeControl. This control does not extend CompositeControl because it should not be a WebControl. /// public override ControlCollection Controls { get { EnsureChildControls(); return base.Controls; } } ////// Copied from CompositeControl. This control does not extend CompositeControl because it should not be a WebControl. /// Does not call Base.DataBind(), since we need to call EnsureChildControls() between /// OnDataBinding() and DataBindChildren(). /// public override void DataBind() { // Do our own databinding OnDataBinding(EventArgs.Empty); EnsureChildControls(); // Do all of our children's databinding DataBindChildren(); } ////// Template shown when a user is logged in, but the user is not in any role associated with a template. /// [ Browsable(false), DefaultValue(null), PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(typeof(LoginView)), ] public virtual ITemplate LoggedInTemplate { get { return _loggedInTemplate; } set { _loggedInTemplate = value; } } ////// Maps groups of roles to templates. /// [ WebCategory("Behavior"), MergableProperty(false), Themeable(false), Filterable(false), PersistenceMode(PersistenceMode.InnerProperty), WebSysDescription(SR.LoginView_RoleGroups) ] public virtual RoleGroupCollection RoleGroups { get { if (_roleGroups == null) { _roleGroups = new RoleGroupCollection(); } return _roleGroups; } } ////// Index of the template rendered on the previous page load. Saved in ControlState. /// 0: AnonymousTemplate /// 1: LoggedInTemplate /// >=2: RoleGroup template with index n-2 /// private int TemplateIndex { get { return _templateIndex; } set { if (value != TemplateIndex) { OnViewChanging(EventArgs.Empty); _templateIndex = value; ChildControlsCreated = false; OnViewChanged(EventArgs.Empty); } } } ////// Raised after the view is changed. /// [ WebCategory("Action"), WebSysDescription(SR.LoginView_ViewChanged) ] public event EventHandler ViewChanged { add { Events.AddHandler(EventViewChanged, value); } remove { Events.RemoveHandler(EventViewChanged, value); } } ////// Raised before the view is changed. Not cancellable, because the view is changed /// when the logged-in user changes, and it wouldn't make sense to cancel this. /// [ WebCategory("Action"), WebSysDescription(SR.LoginView_ViewChanging) ] public event EventHandler ViewChanging { add { Events.AddHandler(EventViewChanging, value); } remove { Events.RemoveHandler(EventViewChanging, value); } } ////// Instantiate the appropriate template. /// protected internal override void CreateChildControls() { Controls.Clear(); // For the first request, set _templateIndex now, so the correct template is // instantiated and we do not raise the ViewChanging/ViewChanged events. Page page = Page; if (page != null && !page.IsPostBack && !DesignMode) { _templateIndex = GetTemplateIndex(); } int templateIndex = TemplateIndex; ITemplate template = null; switch (templateIndex) { case anonymousTemplateIndex: template = AnonymousTemplate; break; case loggedInTemplateIndex: template = LoggedInTemplate; break; default: int roleGroupIndex = templateIndex - roleGroupStartingIndex; RoleGroupCollection roleGroups = RoleGroups; if (0 <= roleGroupIndex && roleGroupIndex < roleGroups.Count) { template = roleGroups[roleGroupIndex].ContentTemplate; } break; } if (template != null) { Control templateContainer = new Control(); template.InstantiateIn(templateContainer); Controls.Add(templateContainer); } } [ EditorBrowsable(EditorBrowsableState.Never), ] public override void Focus() { throw new NotSupportedException(SR.GetString(SR.NoFocusSupport, this.GetType().Name)); } ////// Loads the control state for those properties that should persist across postbacks /// even when EnableViewState=false. /// protected internal override void LoadControlState(object savedState) { if (savedState != null) { Pair state = (Pair)savedState; if (state.First != null) { base.LoadControlState(state.First); } if (state.Second != null) { _templateIndex = (int)state.Second; } } } protected internal override void OnInit(EventArgs e) { base.OnInit(e); if (Page != null) { Page.RegisterRequiresControlState(this); } } ////// Sets the TemplateIndex based on the current user. /// protected internal override void OnPreRender(EventArgs e) { base.OnPreRender(e); TemplateIndex = GetTemplateIndex(); // This is called in Control.PreRenderRecursiveInteral, but we need to call it again // since we may have changed the TemplateIndex EnsureChildControls(); } ////// Raises the ViewChanged event. /// protected virtual void OnViewChanged(EventArgs e) { EventHandler handler = (EventHandler)Events[EventViewChanged]; if (handler != null) { handler(this, e); } } ////// Raises the ViewChanging event. /// protected virtual void OnViewChanging(EventArgs e) { EventHandler handler = (EventHandler)Events[EventViewChanging]; if (handler != null) { handler(this, e); } } protected internal override void Render(HtmlTextWriter writer) { EnsureChildControls(); base.Render(writer); } ////// Saves the control state for those properties that should persist across postbacks /// even when EnableViewState=false. /// protected internal override object SaveControlState() { object baseState = base.SaveControlState(); if (baseState != null || _templateIndex != 0) { object templateIndexState = null; if (_templateIndex != 0) { templateIndexState = _templateIndex; } return new Pair(baseState, templateIndexState); } return null; } ////// Allows the designer to set the TemplateIndex, so the different templates can be shown in the designer. /// [SecurityPermission(SecurityAction.Demand, Unrestricted = true)] protected override void SetDesignModeState(IDictionary data) { if (data != null) { object o = data["TemplateIndex"]; if (o != null) { TemplateIndex = (int)o; // Note: we always recreate the child controls in the designer to correctly handle the case of // the currently selected role group being deleted. This is necessary because the // setter for TemplateIndex won't recreate the controls if the TemplateIndex is unchanged, // which is the case when deleting all but the last role group. [Fix for Bug 148406] ChildControlsCreated = false; } } } private int GetTemplateIndex() { if (!DesignMode && Page != null && Page.Request.IsAuthenticated) { IPrincipal user = LoginUtil.GetUser(this); int roleGroupIndex = -1; // Unlikely but possible for Page.Request.IsAuthenticated to be true and // user to be null. if (user != null) { roleGroupIndex = RoleGroups.GetMatchingRoleGroupInternal(user); } if (roleGroupIndex >= 0) { return roleGroupIndex + roleGroupStartingIndex; } else { return loggedInTemplateIndex; } } else { return anonymousTemplateIndex; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SiteMapNodeItem.cs
- ExceptionNotification.cs
- ListBox.cs
- RequestResizeEvent.cs
- BitmapCacheBrush.cs
- Italic.cs
- PackageRelationship.cs
- DbTransaction.cs
- ObjectItemCollection.cs
- CompilerResults.cs
- BorderSidesEditor.cs
- AppearanceEditorPart.cs
- QfeChecker.cs
- XsltSettings.cs
- SqlUDTStorage.cs
- _HeaderInfoTable.cs
- WindowPattern.cs
- InheritanceContextHelper.cs
- Array.cs
- ClientSettingsStore.cs
- LinkButton.cs
- XmlSchemaSimpleTypeRestriction.cs
- BypassElementCollection.cs
- DataRowView.cs
- StyleSheet.cs
- WindowCollection.cs
- DataGridViewCellStyleChangedEventArgs.cs
- StatusCommandUI.cs
- XmlQuerySequence.cs
- SafeHandle.cs
- VScrollBar.cs
- TriggerActionCollection.cs
- RightsManagementSuppressedStream.cs
- SQLDateTime.cs
- MissingFieldException.cs
- ClientScriptManager.cs
- OleAutBinder.cs
- RoleManagerSection.cs
- JournalNavigationScope.cs
- StrokeCollection.cs
- DrawListViewItemEventArgs.cs
- MemoryRecordBuffer.cs
- WCFServiceClientProxyGenerator.cs
- AspNetCompatibilityRequirementsMode.cs
- FileClassifier.cs
- DateTimeOffsetConverter.cs
- OdbcDataReader.cs
- Rotation3DAnimation.cs
- MethodCallTranslator.cs
- COM2ExtendedUITypeEditor.cs
- HyperLinkStyle.cs
- ServiceProviders.cs
- StringArrayConverter.cs
- HttpContextWrapper.cs
- DiffuseMaterial.cs
- mongolianshape.cs
- ObjectStateFormatter.cs
- MediaEntryAttribute.cs
- SafeNativeMethods.cs
- DataGridCommandEventArgs.cs
- StreamInfo.cs
- LazyTextWriterCreator.cs
- SqlDataReaderSmi.cs
- ToolboxCategoryItems.cs
- FontSourceCollection.cs
- _CacheStreams.cs
- ResourceReferenceExpressionConverter.cs
- odbcmetadatafactory.cs
- PackageDigitalSignature.cs
- TemplateManager.cs
- formatter.cs
- MenuItemCollection.cs
- XmlAttributeProperties.cs
- Lasso.cs
- InvalidAsynchronousStateException.cs
- PerspectiveCamera.cs
- ValueConversionAttribute.cs
- DesignerHost.cs
- NativeObjectSecurity.cs
- VBIdentifierName.cs
- SystemWebSectionGroup.cs
- PassportPrincipal.cs
- ProjectionCamera.cs
- DataProviderNameConverter.cs
- DataControlFieldHeaderCell.cs
- WindowsListViewGroup.cs
- ServiceBusyException.cs
- MimeXmlImporter.cs
- PropertyManager.cs
- RtfToXamlLexer.cs
- SponsorHelper.cs
- ChangeNode.cs
- StyleXamlTreeBuilder.cs
- RemoteWebConfigurationHost.cs
- MenuItemBinding.cs
- RectangleHotSpot.cs
- UrlMapping.cs
- StickyNoteContentControl.cs
- LocatorBase.cs
- WebPartMovingEventArgs.cs