File: UI\MobileControls\Adapters\XhtmlAdapters\XhtmlBasicCommandAdapter.cs
Project: ndp\fx\src\mit\System\Web\System.Web.Mobile.csproj (System.Web.Mobile)
//------------------------------------------------------------------------------
// <copyright file="XhtmlBasicCommandAdapter.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>                                                                
//------------------------------------------------------------------------------
 
using System;
using System.Collections.Specialized;
using System.Security.Permissions;
using System.Web;
using System.Web.Mobile;
using System.Web.UI.MobileControls;
 
#if COMPILING_FOR_SHIPPED_SOURCE
namespace System.Web.UI.MobileControls.ShippedAdapterSource.XhtmlAdapters
#else
namespace System.Web.UI.MobileControls.Adapters.XhtmlAdapters
#endif
{
 
    /// <include file='doc\XhtmlBasicCommandAdapter.uex' path='docs/doc[@for="XhtmlCommandAdapter"]/*' />
    [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 XhtmlCommandAdapter : XhtmlControlAdapter {
        /// <include file='doc\XhtmlBasicCommandAdapter.uex' path='docs/doc[@for="XhtmlCommandAdapter.Control"]/*' />
        protected new Command Control {
            get {
                return base.Control as Command;
            }
        }
 
        public override bool LoadPostData(String key, NameValueCollection data, Object controlPrivateData, out bool dataChanged)
        {
            dataChanged = false;
 
            // HTML input tags of type image postback with the coordinates
            // of the click rather than the name of the control.
            String name = Control.UniqueID;
            String postX = data[name + ".x"];
            String postY = data[name + ".y"];
 
            if (postX != null && postY != null && postX.Length > 0 && postY.Length > 0)
            {
                // set dataChannged to cause RaisePostDataChangedEvent()
                dataChanged = true;
                return true;
            }
 
            // For other command control, defer to default logic in control.
            return base.LoadPostData(key, data, controlPrivateData, out dataChanged);
        }
 
 
        /// <include file='doc\XhtmlBasicCommandAdapter.uex' path='docs/doc[@for="XhtmlCommandAdapter.Render"]/*' />
        public override void Render(XhtmlMobileTextWriter writer) {
            // Note: Since XHTML Basic and MP do not include the script element, we ignore the
            // Format==Link attribute as in CHTML.
            ConditionalClearPendingBreak(writer);
            string imageUrl = Control.ImageUrl;
            if (imageUrl != null && 
                imageUrl.Length > 0 &&
                Device.SupportsImageSubmit) {
                RenderAsInputTypeImage(writer);
            }
            else {
                RenderAsInputTypeSubmit(writer);
            }
        }
 
        private void RenderAsInputTypeImage(XhtmlMobileTextWriter writer) {
            ConditionalEnterStyle(writer, Style);
            writer.WriteBeginTag("input");
            writer.WriteAttribute("type", "image");
            writer.WriteAttribute("name", Control.UniqueID);
            writer.WriteAttribute("src", Control.ResolveUrl(Control.ImageUrl), true);
            writer.WriteAttribute("alt", Control.Text, true);
            ConditionalRenderClassAttribute(writer);
            ConditionalRenderCustomAttribute(writer, XhtmlConstants.AccessKeyCustomAttribute);
            writer.Write("/>");
            // ConditionalSetPendingBreak should always be called *before* ConditionalExitStyle.
            // ConditionalExitStyle may render a block element and clear the pending break.
            ConditionalSetPendingBreakAfterInline(writer);
            ConditionalExitStyle(writer, Style);
        }
 
        private void RenderAsInputTypeSubmit(XhtmlMobileTextWriter writer){
            ConditionalEnterStyle(writer, Style);
            writer.WriteBeginTag("input");
            writer.WriteAttribute("type", "submit");
            writer.WriteAttribute("name", Control.UniqueID);
            writer.WriteAttribute("value", Control.Text, true);
            ConditionalRenderClassAttribute(writer);
            ConditionalRenderCustomAttribute(writer, XhtmlConstants.AccessKeyCustomAttribute);
            writer.Write("/>");
            // ConditionalSetPendingBreak should always be called *before* ConditionalExitStyle.
            // ConditionalExitStyle may render a block element and clear the pending break.
            ConditionalSetPendingBreakAfterInline(writer);
            ConditionalPopPhysicalCssClass(writer);
            ConditionalExitStyle(writer, Style);
        }
       
    }
}