Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / MIT / System / Web / UI / MobileControls / AdRotator.cs / 1305376 / AdRotator.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System.ComponentModel; using System.Diagnostics; using System.Drawing.Design; using System.Web.Mobile; using System.Web.UI.WebControls; using System.Web.Util; using WebCntrls = System.Web.UI.WebControls; using System.Security.Permissions; namespace System.Web.UI.MobileControls { /* * Mobile AdRotator class. * The AdRotator control is for rotating advertisement links every time the * same page is revisited. * * This class aggregates the corresponding ASP.NET AdRotator for delegating * the random selection task of advertisement info to the aggregated * class. The ad info is selected during the PreRender phase of the * aggregated control (So the aggregated control needs to have the * property Visible set to true when entering the PreRender process). * For markup adapters that collect the selected ad info for rendering, * they should subscribe to AdCreated event property and collect the ad * info through the event argument. * * This class also contains a mobile Image control for delegating the * rendering since AdRotator's rendering is the same as Image's rendering * by setting the corresponding properties on the control. * * Copyright (c) 2000 Microsoft Corporation */ ///[ DefaultEvent("AdCreated"), DefaultProperty("AdvertisementFile"), Designer(typeof(System.Web.UI.Design.MobileControls.AdRotatorDesigner)), DesignerAdapter(typeof(System.Web.UI.Design.MobileControls.Adapters.DesignerAdRotatorAdapter)), ToolboxData("<{0}:AdRotator runat=\"server\">{0}:AdRotator>"), ToolboxItem(typeof(System.Web.UI.Design.WebControlToolboxItem)) ] [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] [Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")] public class AdRotator : MobileControl { private WebCntrls.AdRotator _webAdRotator; private Image _image = new Image(); private static readonly Object EventAdCreated = new Object(); private const String ImageKeyDefault = "ImageUrl"; private const String NavigateUrlKeyDefault = "NavigateUrl"; /// public AdRotator() : base() { _webAdRotator = CreateWebAdRotator(); _image.EnableViewState = false; this.Controls.Add(_webAdRotator); this.Controls.Add(_image); // The default value of the Target property of the web AdRotator is // set to "_top". Since we are not exposing this property, we need // to explicity set it to empty string so this property will not be // shown in the rendered markup when the web AdRotator is used to do // the rendering. _webAdRotator.Target = String.Empty; // Due to the fact that C# compiler doesn't allow direct // manipulation of event properties outside of the class that // defines the event variable, the way we delegate the event // handlers to the aggregated web control is to provide a wrapper // to capture the raised event from the aggregated control and // apply the event argument to the event handlers subscribed to // this class. AdCreatedEventHandler adCreatedEventHandler = new AdCreatedEventHandler(WebAdCreated); _webAdRotator.AdCreated += adCreatedEventHandler; } /// protected virtual WebCntrls.AdRotator CreateWebAdRotator() { return new WebCntrls.AdRotator(); } //////////////////////////////////////////////////////////////////////// // Mimic the properties exposed in the original AdRotator. // The properties are got and set directly from the original AdRotator. //////////////////////////////////////////////////////////////////////// /// /// /// ////// Gets or sets the path to the XML file that contains advertisement data. /// ////// [ Bindable(true), DefaultValue(""), Editor(typeof(System.Web.UI.Design.XmlUrlEditor), typeof(UITypeEditor)), MobileCategory(SR.Category_Behavior), MobileSysDescription(SR.AdRotator_AdvertisementFile) ] public String AdvertisementFile { get { return _webAdRotator.AdvertisementFile; } set { _webAdRotator.AdvertisementFile = value; } } ////// The path to the XML file containing the properties of the advertisements to /// render in the ///. /// /// /// ////// Gets or sets a keyword used to match related advertisements in the ad file. /// ////// ////// The keyword used to identify advertisements within a specific catagory. /// ////// [ Bindable(true), DefaultValue(""), MobileCategory(SR.Category_Behavior), MobileSysDescription(SR.AdRotator_KeywordFilter) ] public String KeywordFilter { get { return _webAdRotator.KeywordFilter; } set { _webAdRotator.KeywordFilter = value; } } ////// If the ad source is AdvertisementFile and this property is not empty, an ad /// with a matching keyword will be selected. /// ////// If the ad source is AdvertisementFile and this property set, but no match /// exists, a blank image is displayed and a trace warning is generated. /// /// If this property is not set, keyword filtering is not used to select an ad. ///[ Bindable(true), DefaultValue(ImageKeyDefault), MobileCategory(SR.Category_Behavior), MobileSysDescription(SR.AdRotator_ImageKey) ] public String ImageKey { get { String s = (String) ViewState["ImageKey"]; return((s != null) ? s : ImageKeyDefault); } set { ViewState["ImageKey"] = value; } } /// [ Bindable(true), DefaultValue(NavigateUrlKeyDefault), MobileCategory(SR.Category_Behavior), MobileSysDescription(SR.AdRotator_NavigateUrlKey) ] public String NavigateUrlKey { get { String s = (String) ViewState["NavigateUrlKey"]; return((s != null) ? s : NavigateUrlKeyDefault); } set { ViewState["NavigateUrlKey"] = value; } } /// [ MobileCategory(SR.Category_Action), MobileSysDescription(SR.AdRotator_AdCreated) ] public event AdCreatedEventHandler AdCreated { add { Events.AddHandler(EventAdCreated, value); } remove { Events.RemoveHandler(EventAdCreated, value); } } // protected method (which can be overridden by subclasses) for // raising user events /// protected virtual void OnAdCreated(AdCreatedEventArgs e) { AdCreatedEventHandler handler = (AdCreatedEventHandler)Events[EventAdCreated]; if (handler != null) { handler(this, e); } } /// protected override void Render(HtmlTextWriter writer) { const String accesskeyName = "accesskey"; // Delegate specific custom attribute to the child Image control String accesskey = ((IAttributeAccessor) this).GetAttribute(accesskeyName); if (!String.IsNullOrEmpty(accesskey)) { _image.CustomAttributes[accesskeyName] = accesskey; } _image.RenderControl(writer); } private void WebAdCreated(Object sender, AdCreatedEventArgs e) { // Override the value since it may have been changed by device // select // AdProperties can be null when ad file is not specified // correctly. if (e.AdProperties != null) { e.ImageUrl = (String) e.AdProperties[ImageKey]; e.NavigateUrl = (String) e.AdProperties[NavigateUrlKey]; } // Then invoke user events for further manipulation specified by // user OnAdCreated(e); // Finally, set the necessary properties to the base Image class _image.ImageUrl = ResolveAdRotatorUrl(e.ImageUrl); _image.AlternateText = e.AlternateText; _image.NavigateUrl = ResolveAdRotatorUrl(e.NavigateUrl); } // Helper function adopted from ASP.NET AdRotator class (modified // slightly) private String ResolveAdRotatorUrl(String relativeUrl) { if (relativeUrl == null) { return String.Empty; } // check if it is already absolute, or points to another form if (!UrlPath.IsRelativeUrl(relativeUrl) || relativeUrl.StartsWith(Constants.FormIDPrefix, StringComparison.Ordinal)) { return relativeUrl; } // Deal with app relative syntax (e.g. ~/foo) string tplSourceDir = UrlPath.MakeVirtualPathAppAbsolute(TemplateSourceDirectory); // For the AdRotator, use the AdvertisementFile directory as the // base, and fall back to the page/user control location as the // base. String absoluteFile = UrlPath.Combine(tplSourceDir, AdvertisementFile); String fileDirectory = UrlPath.GetDirectory(absoluteFile); String baseUrl = String.Empty; if (fileDirectory != null) { baseUrl = fileDirectory; } if (baseUrl.Length == 0) { baseUrl = tplSourceDir; } if (baseUrl.Length == 0) { return relativeUrl; } // make it absolute return UrlPath.Combine(baseUrl, relativeUrl); } } } // 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
- PartialArray.cs
- FolderLevelBuildProviderCollection.cs
- ClosureBinding.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- RegexMatch.cs
- DataTableReaderListener.cs
- ReachFixedDocumentSerializer.cs
- BindingUtils.cs
- SafeLibraryHandle.cs
- IDReferencePropertyAttribute.cs
- MouseBinding.cs
- SerialPinChanges.cs
- HealthMonitoringSection.cs
- ArrangedElementCollection.cs
- ConvertTextFrag.cs
- StrokeNodeData.cs
- UpdatePanelControlTrigger.cs
- ClientSettings.cs
- SiteMapDataSourceView.cs
- PromptStyle.cs
- SizeLimitedCache.cs
- BindingManagerDataErrorEventArgs.cs
- RightsManagementResourceHelper.cs
- MetricEntry.cs
- XmlAttributeCollection.cs
- WindowsGraphicsWrapper.cs
- InputProcessorProfilesLoader.cs
- TextAction.cs
- TextChange.cs
- complextypematerializer.cs
- Grid.cs
- CellIdBoolean.cs
- peernodeimplementation.cs
- SqlDependencyUtils.cs
- DataList.cs
- CmsUtils.cs
- ValidatorUtils.cs
- SerializationHelper.cs
- DataGridTextBox.cs
- VisualStyleRenderer.cs
- CatalogZone.cs
- DurableInstanceManager.cs
- Overlapped.cs
- SpinLock.cs
- _ScatterGatherBuffers.cs
- DesignerVerbCollection.cs
- CommandField.cs
- InputReportEventArgs.cs
- DefaultPropertyAttribute.cs
- ValidationErrorCollection.cs
- SqlDataSourceFilteringEventArgs.cs
- COM2ComponentEditor.cs
- GroupByExpressionRewriter.cs
- StateMachineWorkflowInstance.cs
- ProtocolElement.cs
- DataFormat.cs
- JavaScriptSerializer.cs
- WmlPhoneCallAdapter.cs
- HTMLTextWriter.cs
- EmptyStringExpandableObjectConverter.cs
- DecimalConstantAttribute.cs
- RemotingAttributes.cs
- SqlUtils.cs
- BaseCodePageEncoding.cs
- OutKeywords.cs
- WebExceptionStatus.cs
- DeviceFilterDictionary.cs
- SafeRightsManagementEnvironmentHandle.cs
- Propagator.JoinPropagator.cs
- Pointer.cs
- EncryptedXml.cs
- ItemCollection.cs
- DataControlLinkButton.cs
- DropShadowBitmapEffect.cs
- ListenDesigner.cs
- RectConverter.cs
- BooleanExpr.cs
- TraceEventCache.cs
- Queue.cs
- Processor.cs
- XmlSchemaNotation.cs
- CmsInterop.cs
- CategoryEditor.cs
- HttpFileCollection.cs
- RouteItem.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- BorderGapMaskConverter.cs
- EventSourceCreationData.cs
- EventProviderClassic.cs
- SemanticAnalyzer.cs
- DataReceivedEventArgs.cs
- PathNode.cs
- FamilyMapCollection.cs
- ToolStripItem.cs
- UrlPropertyAttribute.cs
- StrongNameIdentityPermission.cs
- FlowDocumentPaginator.cs
- JoinCqlBlock.cs
- FragmentNavigationEventArgs.cs
- WebEncodingValidatorAttribute.cs