2005-04-19 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mcs / class / System.Web / System.Web.UI.HtmlControls / HtmlForm.cs
1 /*      System.Web.UI.HtmlControls\r
2 *       Authors\r
3 *               Leen Toelen (toelen@hotmail.com)\r
4 */\r
5 \r
6 using System;\r
7 using System.Collections;\r
8 using System.ComponentModel;\r
9 using System.Text;\r
10 using System.Web;\r
11 using System.Web.UI;\r
12 using System.Web.Util;\r
13 \r
14 namespace System.Web.UI.HtmlControls{\r
15         \r
16         public class HtmlForm : HtmlContainerControl{\r
17                 \r
18                 // Unused\r
19                 //private static string SmartNavIncludeScriptKey  = "SmartNavIncludeScript";\r
20                 \r
21                 public HtmlForm(): base("form"){}\r
22                                 \r
23                 protected override void RenderAttributes(HtmlTextWriter writer){\r
24                         writer.WriteAttribute("name", Name);\r
25                         Attributes.Remove("name");\r
26                         writer.WriteAttribute("method", Method);\r
27                         Attributes.Remove("method");\r
28                         writer.WriteAttribute("action", Action, true);\r
29                         Attributes.Remove("action");\r
30                         if (Enctype != null){\r
31                                 writer.WriteAttribute ("enctype", Enctype);\r
32                                 Attributes.Remove ("enctype");\r
33                         }\r
34 \r
35                         Hashtable onSubmit = Page.ClientScript.submitStatements;\r
36                         if (onSubmit != null && onSubmit.Count > 0){\r
37                                 StringBuilder sb = new StringBuilder ();\r
38                                 string prev = Attributes ["onsubmit"];\r
39                                 if (prev != null){\r
40                                         sb.Append (prev);\r
41                                         Attributes.Remove ("onsubmit");\r
42                                 }\r
43 \r
44                                 foreach (Hashtable hash in onSubmit.Values) {\r
45                                         foreach (string s in hash.Values) {\r
46                                                 sb.Append (s);\r
47                                         }\r
48                                 }\r
49 \r
50                                 writer.WriteAttribute ("language", "javascript");\r
51                                 writer.WriteAttribute ("onsubmit", sb.ToString ());\r
52                         }\r
53 \r
54                         if (ID == null)\r
55                                 writer.WriteAttribute ("id", ClientID);\r
56 \r
57                         base.RenderAttributes (writer);\r
58                 }\r
59                 \r
60                 protected override void Render(HtmlTextWriter output){\r
61                         /*** Disabled smart navigation. We have no scripts - Gonzalo\r
62                         if (Page.SmartNavigation == false){\r
63                                 base.Render (output);\r
64                                 return;\r
65                         }\r
66 \r
67                         ((IAttributeAccessor) this).SetAttribute("_smartNavigation","true");\r
68                         HttpBrowserCapabilities browserCap = Context.Request.Browser;\r
69                         if (browserCap.Browser.ToLower() != "ie" && browserCap.MajorVersion < 5){\r
70                                 base.Render(output);\r
71                                 return;\r
72                         }\r
73                         output.WriteLine("<IFRAME ID=_hifSmartNav NAME=_hifSmartNav STYLE=display:none ></IFRAME>");\r
74                                 \r
75                         if (browserCap.MinorVersion < 0.5 && browserCap.MajorVersion != 5)\r
76                                 Page.RegisterClientScriptFile("SmartNavIncludeScript","JScript","SmartNavIE5.js");\r
77                         else if (Page.IsPostBack) Page.RegisterClientScriptFile("SmartNavIncludeScript","JScript","SmartNav.js");\r
78                         */\r
79                         base.Render(output);\r
80                 }\r
81                 \r
82                 protected override void RenderChildren (HtmlTextWriter writer)\r
83                 {\r
84                         Page.OnFormRender (writer,ClientID);\r
85                         base.RenderChildren (writer);\r
86                         Page.OnFormPostRender (writer,ClientID);\r
87                 }\r
88                 \r
89                 protected override void OnInit(EventArgs e){\r
90                         base.OnInit(e);\r
91                         Page.RegisterViewStateHandler();\r
92 #if NET_2_0\r
93                         Page.RegisterForm (this);\r
94 #endif\r
95                 }\r
96                 \r
97                 internal string Action {\r
98                         get{\r
99                                 string executionFilePath = Context.Request.CurrentExecutionFilePath;\r
100                                 string filePath = Context.Request.FilePath;\r
101                                 string attr;\r
102                                 if (executionFilePath == filePath) {\r
103                                         attr = filePath;\r
104                                         int lastSlash = attr.LastIndexOf('/');\r
105                                         if (lastSlash >= 0)\r
106                                                 attr = attr.Substring(lastSlash + 1);\r
107                                 } else {\r
108                                         attr = UrlUtils.MakeRelative (executionFilePath, UrlUtils.GetDirectory (filePath));\r
109                                         if (attr == null)\r
110                                                 attr = executionFilePath;\r
111                                 }\r
112                                 string queryString = Context.Request.QueryStringRaw;\r
113                                 if (queryString != null && queryString.Length > 0)\r
114                                         attr = String.Concat(attr, '?', queryString);\r
115                                 return attr;\r
116                         }\r
117                 }\r
118                 \r
119                 [DefaultValue("")]\r
120                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]\r
121                 [WebCategory("Behavior")]\r
122                 public string Enctype{\r
123                         get{\r
124                                 string attr = Attributes["enctype"];\r
125                                 if (attr != null){\r
126                                         return attr;\r
127                                 }\r
128                                 return "";\r
129                         }\r
130                         set{\r
131                                 Attributes["enctype"] = AttributeToString(value);\r
132                         }\r
133                 }\r
134                 \r
135                 [DefaultValue("")]\r
136                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]\r
137                 [WebCategory("Behavior")]\r
138                 public string Method{\r
139                         get{\r
140                                 string attr = Attributes["method"];\r
141                                 if (attr != null){\r
142                                         return attr;\r
143                                 }\r
144                                 return "post";\r
145                         }\r
146                         set{\r
147                                 Attributes["method"] = AttributeToString(value);\r
148                         }\r
149                 }\r
150                 \r
151                 [DefaultValue("")]\r
152                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]\r
153                 [WebCategory("Behavior")]\r
154                 public string Target{\r
155                         get{\r
156                                 string attr = Attributes["target"];\r
157                                 if (attr != null){\r
158                                         return attr;\r
159                                 }\r
160                                 return String.Empty;\r
161                         }\r
162                         set{\r
163                                 Attributes["target"] = AttributeToString(value);\r
164                         }\r
165                 }\r
166                 \r
167                 [DefaultValue("")]\r
168                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]\r
169                 [WebCategory("Appearance")]\r
170                 public virtual string Name{\r
171                         get{\r
172                                 return UniqueID;\r
173                         }\r
174                         set {\r
175                         }\r
176                 }               \r
177         } // class HtmlForm\r
178 } // namespace System.Web.UI.HtmlControls\r
179 \r