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