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);
+ }
+ }
+}
+
+