e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
155 lines
6.1 KiB
C#
155 lines
6.1 KiB
C#
//------------------------------------------------------------------------------
|
|
// <copyright file="ChtmlFormAdapter.cs" company="Microsoft">
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
//------------------------------------------------------------------------------
|
|
|
|
using System.Globalization;
|
|
using System.Security.Permissions;
|
|
|
|
#if COMPILING_FOR_SHIPPED_SOURCE
|
|
namespace System.Web.UI.MobileControls.ShippedAdapterSource
|
|
#else
|
|
namespace System.Web.UI.MobileControls.Adapters
|
|
#endif
|
|
|
|
{
|
|
/*
|
|
* ChtmlFormAdapter class.
|
|
*
|
|
* Copyright (c) 2000 Microsoft Corporation
|
|
*/
|
|
/// <include file='doc\ChtmlFormAdapter.uex' path='docs/doc[@for="ChtmlFormAdapter"]/*' />
|
|
[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 ChtmlFormAdapter : HtmlFormAdapter
|
|
{
|
|
private static readonly String _contentTypeMetaTag = "<meta http-equiv=\"Content-Type\" content=\"{0}; charset={1}\">\r\n";
|
|
|
|
/// <include file='doc\ChtmlFormAdapter.uex' path='docs/doc[@for="ChtmlFormAdapter.ShouldRenderFormTag"]/*' />
|
|
protected override bool ShouldRenderFormTag()
|
|
{
|
|
if (!Device.RequiresOutputOptimization || Control.PageCount > 1)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
return IsFormTagNeeded(Control);
|
|
}
|
|
|
|
// Recursive method to check if there is any descendant control
|
|
// requires the form tag. For unknown cases, the method returns true
|
|
// in case the unknown rendering requires the form tag.
|
|
private bool IsFormTagNeeded(Control control)
|
|
{
|
|
// Check itself first
|
|
if (!control.Visible)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
MobileControl mobileControl = control as MobileControl;
|
|
if (mobileControl != null)
|
|
{
|
|
// Since we don't have control over what content is included
|
|
// in the template, to be safe we just generate the form tag.
|
|
if (mobileControl.IsTemplated)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
HtmlControlAdapter adapter = mobileControl.Adapter as HtmlControlAdapter;
|
|
if (adapter != null && adapter.RequiresFormTag)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
else if (!(control is UserControl) &&
|
|
!(control is LiteralControl))
|
|
{
|
|
// UserControl simply acts as a container, so the checking
|
|
// should be delegated to its children below.
|
|
// LiteralControl is a plain text control. Also, it is
|
|
// generated for the spaces in between mobile control tags so
|
|
// we don't want to consider it as a form required control.
|
|
// For other cases, we should generate form tag as we don't
|
|
// know the content that will be generated.
|
|
return true;
|
|
}
|
|
|
|
// No problem with the current control so far, now recursively
|
|
// check its children.
|
|
if (control.HasControls())
|
|
{
|
|
foreach (Control child in control.Controls)
|
|
{
|
|
if (IsFormTagNeeded(child))
|
|
{
|
|
// This is to get out of recursive loop without
|
|
// further checking on other controls.
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/// <include file='doc\ChtmlFormAdapter.uex' path='docs/doc[@for="ChtmlFormAdapter.RenderExtraHeadElements"]/*' />
|
|
protected override bool RenderExtraHeadElements(HtmlMobileTextWriter writer)
|
|
{
|
|
bool result = false;
|
|
|
|
String metaTagName = Device.RequiredMetaTagNameValue;
|
|
if (metaTagName != null)
|
|
{
|
|
if (writer != null)
|
|
{
|
|
writer.Write("<meta NAME=\"" + metaTagName + "\" CONTENT=\"True\">\r\n");
|
|
}
|
|
result = true;
|
|
}
|
|
|
|
String charset = Page.Response.Charset;
|
|
if (Device.RequiresContentTypeMetaTag &&
|
|
charset != null && charset.Length > 0)
|
|
{
|
|
if (writer != null)
|
|
{
|
|
writer.Write(String.Format(CultureInfo.InvariantCulture, _contentTypeMetaTag, Device.PreferredRenderingMime, charset));
|
|
}
|
|
result = true;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/// <include file='doc\ChtmlFormAdapter.uex' path='docs/doc[@for="ChtmlFormAdapter.RenderPagerTag"]/*' />
|
|
protected internal override void RenderPagerTag(
|
|
HtmlMobileTextWriter writer,
|
|
int pageToNavigate,
|
|
String text)
|
|
{
|
|
writer.EnterLayout(Style);
|
|
writer.EnterFormat(Style);
|
|
writer.WriteBeginTag("input");
|
|
|
|
// Specially encode the page number with the control id.
|
|
// The corresponding code that handles postback should know how
|
|
// to extract the page number correctly.
|
|
writer.Write(" name=\"");
|
|
writer.Write(Control.UniqueID);
|
|
writer.Write(Constants.PagePrefix);
|
|
writer.Write(pageToNavigate.ToString(CultureInfo.InvariantCulture));
|
|
writer.Write("\"");
|
|
|
|
writer.WriteAttribute("type", "submit");
|
|
writer.WriteAttribute("value", text, true);
|
|
writer.Write("/>");
|
|
writer.ExitFormat(Style);
|
|
writer.ExitLayout(Style);
|
|
}
|
|
}
|
|
}
|