2002-03-26 Gaurav Vaish <gvaish@iitk.ac.in>
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / LinkButton.cs
1 /**\r
2  * Namespace: System.Web.UI.WebControls\r
3  * Class:     LinkButton\r
4  *\r
5  * Author:  Gaurav Vaish\r
6  * Maintainer: gvaish@iitk.ac.in\r
7  * Contact: <my_scripts2001@yahoo.com>, <gvaish@iitk.ac.in>\r
8  * Implementation: yes\r
9  * Status:  100%\r
10  *\r
11  * (C) Gaurav Vaish (2001)\r
12  */\r
13 \r
14 using System;\r
15 using System.Web;\r
16 using System.Web.UI;\r
17 \r
18 namespace System.Web.UI.WebControls\r
19 {\r
20         [DefaultEvent("Click")]\r
21         [DefaultProperty("Text")]\r
22         //[Designer("??")]\r
23         [ControlBuilder(typeof(LinkButtonControlBuilder))]\r
24         //[DataBindingHandler("??")]\r
25         [ParseChildren(false)]\r
26         [ToolboxData("<{0}:LinkButton runat=\"server\">LinkButton</{0}:LinkButton>")]\r
27         public class LinkButton : WebControl, IPostBackEventHandler\r
28         {\r
29                 private static readonly object ClickEvent   = new object();\r
30                 private static readonly object CommandEvent = new object();\r
31 \r
32                 public LinkButton(): base(HtmlTextWriterTag.A)\r
33                 {\r
34                 }\r
35 \r
36                 public bool CausesValidation\r
37                 {\r
38                         get\r
39                         {\r
40                                 object o = ViewState["CausesValidation"];\r
41                                 if(o!=null)\r
42                                         return (bool)o;\r
43                                 return true;\r
44                         }\r
45                         set\r
46                         {\r
47                                 ViewState["CausesValidation"] = value;\r
48                         }\r
49                 }\r
50 \r
51                 public string CommandArgument\r
52                 {\r
53                         get\r
54                         {\r
55                                 object o = ViewState["CommandArgument"];\r
56                                 if(o!=null)\r
57                                         return (string)o;\r
58                                 return String.Empty;\r
59                         }\r
60                         set\r
61                         {\r
62                                 ViewState["CommandArgument"] = value;\r
63                         }\r
64                 }\r
65 \r
66                 public string CommandName\r
67                 {\r
68                         get\r
69                         {\r
70                                 object o = ViewState["CommandName"];\r
71                                 if(o!=null)\r
72                                         return (string)o;\r
73                                 return String.Empty;\r
74                         }\r
75                         set\r
76                         {\r
77                                 ViewState["CommandName"] = value;\r
78                         }\r
79                 }\r
80 \r
81                 public virtual string Text\r
82                 {\r
83                         get\r
84                         {\r
85                                 object o = ViewState["Text"];\r
86                                 if(o != null)\r
87                                 {\r
88                                         return (string)o;\r
89                                 }\r
90                                 return String.Empty;\r
91                         }\r
92                         set\r
93                         {\r
94                                 ViewState["Text"] = value;\r
95                         }\r
96                 }\r
97 \r
98                 public event EventHandler Click\r
99                 {\r
100                         add\r
101                         {\r
102                                 Events.AddHandler(ClickEvent, value);\r
103                         }\r
104                         remove\r
105                         {\r
106                                 Events.RemoveHandler(ClickEvent, value);\r
107                         }\r
108                 }\r
109 \r
110                 public event CommandEventHandler Command\r
111                 {\r
112                         add\r
113                         {\r
114                                 Events.AddHandler(CommandEvent, value);\r
115                         }\r
116                         remove\r
117                         {\r
118                                 Events.RemoveHandler(CommandEvent, value);\r
119                         }\r
120                 }\r
121 \r
122                 protected virtual void OnClick(EventArgs e)\r
123                 {\r
124                         if(Events != null)\r
125                         {\r
126                                 EventHandler eh = (EventHandler)(Events[ClickEvent]);\r
127                                 if(eh != null)\r
128                                         eh(this, e);\r
129                         }\r
130                 }\r
131 \r
132                 protected virtual void OnCommand(CommandEventArgs e)\r
133                 {\r
134                         if(Events != null)\r
135                         {\r
136                                 CommandEventHandler ceh = (CommandEventHandler)(Events[CommandEvent]);\r
137                                 if(ceh != null)\r
138                                         ceh(this, e);\r
139                         }\r
140                 }\r
141 \r
142                 void IPostBackEventHandler.RaisePostBackEvent(string eventArgument)\r
143                 {\r
144                         if(CausesValidation)\r
145                         {\r
146                                 Page.Validate();\r
147                         }\r
148                         OnClick(new EventArgs());\r
149                         OnCommand( new CommandEventArgs(CommandName, CommandArgument));\r
150                 }\r
151 \r
152                 protected override void AddAttributesToRender(HtmlTextWriter writer)\r
153                 {\r
154                         base.AddAttributesToRender(writer);\r
155                         if(Enabled && Page != null)\r
156                         {\r
157                                 if(CausesValidation && Page.Validators.Count > 0)\r
158                                 {\r
159                                         writer.AddAttribute(HtmlTextWriterAttribute.Href, "javscript:" + Utils.GetClientValidatedPostBack(this));\r
160                                         return;\r
161                                 }\r
162                                 writer.AddAttribute(HtmlTextWriterAttribute.Href, Page.GetPostBackClientHyperlink(this, ""));\r
163                         }\r
164                 }\r
165 \r
166                 protected override void AddParsedSubObject(object obj)\r
167                 {\r
168                         if(HasControls())\r
169                         {\r
170                                 AddParsedSubObject(obj);\r
171                                 return;\r
172                         }\r
173                         if(obj is LiteralControl)\r
174                         {\r
175                                 Text = ((LiteralControl)obj).Text;\r
176                                 return;\r
177                         }\r
178                         if(Text.Length > 0)\r
179                         {\r
180                                 AddParsedSubObject(Text);\r
181                                 Text = String.Empty;\r
182                         }\r
183                         AddParsedSubObject(obj);\r
184                 }\r
185 \r
186                 protected override void LoadViewState(object savedState)\r
187                 {\r
188                         if(savedState != null)\r
189                         {\r
190                                 base.LoadViewState(savedState);\r
191                                 string savedText = (string)ViewState["Text"];\r
192                                 if(savedText != null)\r
193                                         Text = savedText;\r
194                         }\r
195                 }\r
196 \r
197                 protected override void RenderContents(HtmlTextWriter writer)\r
198                 {\r
199                         if(HasControls())\r
200                         {\r
201                                 RenderContents(writer);\r
202                                 return;\r
203                         }\r
204                         writer.Write(Text);\r
205                 }\r
206         }\r
207 }\r