X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem.Web%2FSystem.Web.UI.HtmlControls%2FHtmlForm.cs;h=7d6c753ccffe4b23e4e3987c70f98f75a13942d2;hb=53e266903ec6b2d822cf5b0c566f6374df5307a4;hp=906e52a81c9e3bdb306e510744206fea75081689;hpb=234225d112c4b018b8d1796f4c06a15812137500;p=mono.git diff --git a/mcs/class/System.Web/System.Web.UI.HtmlControls/HtmlForm.cs b/mcs/class/System.Web/System.Web.UI.HtmlControls/HtmlForm.cs index 906e52a81c9..7d6c753ccff 100644 --- a/mcs/class/System.Web/System.Web.UI.HtmlControls/HtmlForm.cs +++ b/mcs/class/System.Web/System.Web.UI.HtmlControls/HtmlForm.cs @@ -1,179 +1,344 @@ -/* System.Web.UI.HtmlControls -* Authors -* Leen Toelen (toelen@hotmail.com) -*/ - -using System; -using System.Collections; -using System.ComponentModel; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.Util; - -namespace System.Web.UI.HtmlControls{ - - public class HtmlForm : HtmlContainerControl{ - - // Unused - //private static string SmartNavIncludeScriptKey = "SmartNavIncludeScript"; - - public HtmlForm(): base("form"){} - - protected override void RenderAttributes(HtmlTextWriter writer){ - writer.WriteAttribute("name", Name); - Attributes.Remove("name"); - writer.WriteAttribute("method", Method); - Attributes.Remove("method"); - writer.WriteAttribute("action", Action, true); - Attributes.Remove("action"); - if (Enctype != null){ - writer.WriteAttribute ("enctype", Enctype); - Attributes.Remove ("enctype"); - } - - Hashtable onSubmit = Page.ClientScript.submitStatements; - if (onSubmit != null && onSubmit.Count > 0){ - StringBuilder sb = new StringBuilder (); - string prev = Attributes ["onsubmit"]; - if (prev != null){ - sb.Append (prev); - Attributes.Remove ("onsubmit"); - } - - foreach (Hashtable hash in onSubmit.Values) { - foreach (string s in hash.Values) { - sb.Append (s); - } - } - - writer.WriteAttribute ("language", "javascript"); - writer.WriteAttribute ("onsubmit", sb.ToString ()); - } - - if (ID == null) - writer.WriteAttribute ("id", ClientID); - - base.RenderAttributes (writer); - } - - protected override void Render(HtmlTextWriter output){ - /*** Disabled smart navigation. We have no scripts - Gonzalo - if (Page.SmartNavigation == false){ - base.Render (output); - return; - } - - ((IAttributeAccessor) this).SetAttribute("_smartNavigation","true"); - HttpBrowserCapabilities browserCap = Context.Request.Browser; - if (browserCap.Browser.ToLower() != "ie" && browserCap.MajorVersion < 5){ - base.Render(output); - return; - } - output.WriteLine(""); - - if (browserCap.MinorVersion < 0.5 && browserCap.MajorVersion != 5) - Page.RegisterClientScriptFile("SmartNavIncludeScript","JScript","SmartNavIE5.js"); - else if (Page.IsPostBack) Page.RegisterClientScriptFile("SmartNavIncludeScript","JScript","SmartNav.js"); - */ - base.Render(output); - } - - protected override void RenderChildren (HtmlTextWriter writer) - { - Page.OnFormRender (writer,ClientID); - base.RenderChildren (writer); - Page.OnFormPostRender (writer,ClientID); - } - - protected override void OnInit(EventArgs e){ - base.OnInit(e); - Page.RegisterViewStateHandler(); -#if NET_2_0 - Page.RegisterForm (this); -#endif - } - - internal string Action { - get{ - string executionFilePath = Context.Request.CurrentExecutionFilePath; - string filePath = Context.Request.FilePath; - string attr; - if (executionFilePath == filePath) { - attr = filePath; - int lastSlash = attr.LastIndexOf('/'); - if (lastSlash >= 0) - attr = attr.Substring(lastSlash + 1); - } else { - attr = UrlUtils.MakeRelative (executionFilePath, UrlUtils.GetDirectory (filePath)); - if (attr == null) - attr = executionFilePath; - } - string queryString = Context.Request.QueryStringRaw; - if (queryString != null && queryString.Length > 0) - attr = String.Concat(attr, '?', queryString); - return attr; - } - } - - [DefaultValue("")] - [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)] - [WebCategory("Behavior")] - public string Enctype{ - get{ - string attr = Attributes["enctype"]; - if (attr != null){ - return attr; - } - return ""; - } - set{ - Attributes["enctype"] = AttributeToString(value); - } - } - - [DefaultValue("")] - [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)] - [WebCategory("Behavior")] - public string Method{ - get{ - string attr = Attributes["method"]; - if (attr != null){ - return attr; - } - return "post"; - } - set{ - Attributes["method"] = AttributeToString(value); - } - } - - [DefaultValue("")] - [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)] - [WebCategory("Behavior")] - public string Target{ - get{ - string attr = Attributes["target"]; - if (attr != null){ - return attr; - } - return String.Empty; - } - set{ - Attributes["target"] = AttributeToString(value); - } - } - - [DefaultValue("")] - [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)] - [WebCategory("Appearance")] - public virtual string Name{ - get{ - return UniqueID; - } - set { - } - } - } // class HtmlForm -} // namespace System.Web.UI.HtmlControls - +// +// System.Web.UI.HtmlControls.HtmlForm.cs +// +// Author: +// Dick Porter +// +// Copyright (C) 2005 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +using System.ComponentModel; +using System.Collections.Specialized; +using System.Security.Permissions; +using System.Web.Util; +using System.Web.UI.WebControls; + +namespace System.Web.UI.HtmlControls +{ + // CAS + [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] + [AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] + public class HtmlForm : HtmlContainerControl + { + bool inited; + + public HtmlForm () : base ("form") + { + } + +#if NET_2_0 + string defaultbutton = ""; + [DefaultValue ("")] + public string DefaultButton + { + get { + return defaultbutton; + } + set { + defaultbutton = (value == null ? "" : value); + } + } + + string defaultfocus = ""; + [DefaultValue ("")] + public string DefaultFocus + { + get { + return defaultfocus; + } + set { + defaultfocus = (value == null ? "" : value); + } + } +#endif + + [DefaultValue ("")] + [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)] + public string Enctype + { + get { + string enc = Attributes["enctype"]; + + if (enc == null) { + return (String.Empty); + } + + return (enc); + } + set { + if (value == null) { + Attributes.Remove ("enctype"); + } else { + Attributes["enctype"] = value; + } + } + } + + [DefaultValue ("")] + [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)] + public string Method + { + get { + string method = Attributes["method"]; + + if ((method == null) || (method.Length == 0)) { + return ("post"); + } + + return (method); + } + set { + if (value == null) { + Attributes.Remove ("method"); + } else { + Attributes["method"] = value; + } + } + } + + [DefaultValue ("")] + [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)] + public virtual string Name + { + get { + return UniqueID; + } + set { + /* why am i here? I do nothing. */ + } + } + +#if NET_2_0 + bool submitdisabledcontrols = false; + [DefaultValue (false)] + public virtual bool SubmitDisabledControls + { + get { + return submitdisabledcontrols; + } + set { + submitdisabledcontrols = value; + } + } +#endif + + [DefaultValue ("")] + [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)] + public string Target + { + get { + string target = Attributes["target"]; + + if (target == null) { + return (String.Empty); + } + + return (target); + } + set { + if (value == null) { + Attributes.Remove ("target"); + } else { + Attributes["target"] = value; + } + } + } + + public override string UniqueID { + get { + return base.UniqueID; + } + } + +#if NET_2_0 + [MonoTODO ("why override?")] + protected override ControlCollection CreateControlCollection () + { + return base.CreateControlCollection (); + } +#endif + +#if NET_2_0 + protected internal +#else + protected +#endif + override void OnInit (EventArgs e) + { + inited = true; + Page.RegisterViewStateHandler (); + +#if NET_2_0 + Page.RegisterForm (this); +#endif + + base.OnInit (e); + } + +#if NET_2_0 + internal bool DetermineRenderUplevel () + { + /* this bit is c&p'ed from BaseValidator.DetermineRenderUplevel */ + try { + if (Page != null && Page.Request != null) + return ( + /* From someplace on the web: "JavaScript 1.2 + * and later (also known as ECMAScript) has + * built-in support for regular + * expressions" */ + ((Page.Request.Browser.EcmaScriptVersion.Major == 1 + && Page.Request.Browser.EcmaScriptVersion.Minor >= 2) + || (Page.Request.Browser.EcmaScriptVersion.Major > 1)) + + /* document.getElementById, .getAttribute, + * etc, are all DOM level 1. I don't think we + * use anything in level 2.. */ + && Page.Request.Browser.W3CDomVersion.Major >= 1); + } + catch { + /* this can happen with a fake Page in nunit + * tests, since Page.Context == null */ + ; + } + + return false; + } + + protected internal override void OnPreRender (EventArgs e) + { + base.OnPreRender(e); + } +#endif + + protected override void RenderAttributes (HtmlTextWriter w) + { + /* Need to always render: name, method, action + * and id + */ + + string action; + string file_path = Page.Request.FilePath; + string current_path = Page.Request.CurrentExecutionFilePath; + if (file_path == current_path) { + // Just the filename will do + action = UrlUtils.GetFile (file_path); + } else { + // Fun. We need to make cookieless sessions work, so no + // absolute paths here. + Uri current_uri = new Uri ("http://host" + current_path); + Uri fp_uri = new Uri ("http://host" + file_path); + action = fp_uri.MakeRelative (current_uri); + } + + action += Page.Request.QueryStringRaw; + + w.WriteAttribute ("name", Name); + + w.WriteAttribute ("method", Method); + w.WriteAttribute ("action", action); + + if (ID == null) { + /* If ID != null then HtmlControl will + * write the id attribute + */ + w.WriteAttribute ("id", ClientID); + Attributes.Remove ("id"); + } + + string submit = Page.GetSubmitStatements (); + if (submit != null && submit != "") + w.WriteAttribute ("onsubmit", submit); + + /* enctype and target should not be written if + * they are empty + */ + string enctype = Enctype; + if (enctype != null && enctype != "") { + w.WriteAttribute ("enctype", enctype); + } + + string target = Target; + if (target != null && target != "") { + w.WriteAttribute ("target", target); + } + +#if NET_2_0 + string defaultbutton = DefaultButton; + if (defaultbutton != null && defaultbutton != "") { + Control c = FindControl (defaultbutton); + + if (c == null || !(c is IButtonControl)) + throw new InvalidOperationException(String.Format ("The DefaultButton of '{0}' must be the ID of a control of type IButtonControl.", + ID)); + } +#endif + + /* Now remove them from the hash so the base + * RenderAttributes can do all the rest + */ + Attributes.Remove ("method"); + Attributes.Remove ("enctype"); + Attributes.Remove ("target"); + + base.RenderAttributes (w); + } + +#if NET_2_0 + protected internal +#else + protected +#endif + override void RenderChildren (HtmlTextWriter w) + { + if (!inited) { + Page.RegisterViewStateHandler (); +#if NET_2_0 + Page.RegisterForm (this); +#endif + } + Page.OnFormRender (w, ClientID); + base.RenderChildren (w); + Page.OnFormPostRender (w, ClientID); + } + +#if NET_2_0 + /* According to corcompare */ + [MonoTODO ("why override?")] + public override void RenderControl (HtmlTextWriter w) + { + base.RenderControl (w); + } +#endif + +#if NET_2_0 + protected internal +#else + protected +#endif + override void Render (HtmlTextWriter w) + { + base.Render (w); + } + } +} + +