2 // System.Web.UI.WebControls.ImageButton.cs
5 // Jordi Mas i Hernandez (jordi@ximian.com)
7 // (C) 2005 Novell, Inc (http://www.novell.com)
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 using System.Collections.Specialized;
32 using System.ComponentModel;
33 using System.Security.Permissions;
35 namespace System.Web.UI.WebControls {
38 [AspNetHostingPermissionAttribute (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
39 [AspNetHostingPermissionAttribute (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
41 [DefaultEvent("Click")]
43 [Designer ("System.Web.UI.Design.WebControls.PreviewControlDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
44 [SupportsEventValidation]
45 public class ImageButton : Image, IPostBackDataHandler, IPostBackEventHandler, IButtonControl {
47 public class ImageButton : Image, IPostBackDataHandler, IPostBackEventHandler {
49 private static readonly object ClickEvent = new object ();
50 private static readonly object CommandEvent = new object ();
51 private int pos_x, pos_y;
62 [WebSysDescription ("")]
63 [WebCategory ("Behavior")]
70 bool CausesValidation {
72 return ViewState.GetBool ("CausesValidation", true);
76 ViewState ["CausesValidation"] = value;
82 [WebSysDescription ("")]
83 [WebCategory ("Behavior")]
87 public string CommandArgument {
89 return ViewState.GetString ("CommandArgument", "");
92 ViewState ["CommandArgument"] = value;
97 [WebSysDescription ("")]
98 [WebCategory ("Behavior")]
102 public string CommandName {
104 return ViewState.GetString ("CommandName", "");
107 ViewState ["CommandName"] = value;
112 [EditorBrowsable (EditorBrowsableState.Always)]
114 [DefaultValue (true)]
117 public virtual new bool Enabled
120 throw new NotImplementedException ();
123 throw new NotImplementedException ();
128 [EditorBrowsable (EditorBrowsableState.Never)]
130 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
132 public virtual new bool GenerateEmptyAlternateText
135 throw new NotImplementedException ();
138 throw new NotImplementedException ();
144 public virtual string OnClientClick
147 return ViewState.GetString ("OnClientClick", "");
150 ViewState ["OnClientClick"] = value;
156 [UrlProperty ("*.aspx")]
161 [Editor ("System.Web.UI.Design.UrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
162 public virtual string PostBackUrl {
164 return ViewState.GetString ("PostBackUrl", String.Empty);
167 ViewState["PostBackUrl"] = value;
173 [WebSysDescription ("")]
174 [WebCategory ("Behavior")]
175 public virtual string ValidationGroup
178 return ViewState.GetString ("ValidationGroup", "");
181 ViewState ["ValidationGroup"] = value;
187 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
188 #if NET_2_0 && HAVE_CONTROL_ADAPTERS
189 protected virtual new
193 HtmlTextWriterTag TagKey {
194 get { return HtmlTextWriterTag.Input; }
198 // Gets or sets the value of the ImageButton control's AlternateText property. (MSDN)
199 protected virtual string Text
202 return AlternateText;
205 AlternateText = value;
210 protected override void AddAttributesToRender (HtmlTextWriter writer)
213 Page.VerifyRenderingInServerForm (this);
215 writer.AddAttribute (HtmlTextWriterAttribute.Type, "image");
216 writer.AddAttribute (HtmlTextWriterAttribute.Name, UniqueID);
218 string onclick = OnClientClick;
219 onclick = ClientScriptManager.EnsureEndsWithSemicolon (onclick);
220 if (Attributes ["onclick"] != null) {
221 onclick = ClientScriptManager.EnsureEndsWithSemicolon (onclick + Attributes ["onclick"]);
222 Attributes.Remove ("onclick");
226 PostBackOptions options = GetPostBackOptions ();
227 onclick += Page.ClientScript.GetPostBackEventReference (options);
230 if (onclick.Length > 0)
231 writer.AddAttribute (HtmlTextWriterAttribute.Onclick, onclick);
233 if (CausesValidation && Page != null && Page.AreValidatorsUplevel ()) {
234 ClientScriptManager csm = new ClientScriptManager (Page);
235 writer.AddAttribute (HtmlTextWriterAttribute.Onclick, csm.GetClientValidationEvent ());
236 writer.AddAttribute ("language", "javascript");
239 base.AddAttributesToRender (writer);
243 protected virtual PostBackOptions GetPostBackOptions ()
245 PostBackOptions options = new PostBackOptions (this);
246 options.ActionUrl = (PostBackUrl.Length > 0 ? Page.ResolveClientUrl (PostBackUrl) : null);
247 options.ValidationGroup = null;
248 options.Argument = "";
249 options.ClientSubmit = false;
250 options.RequiresJavaScriptProtocol = false;
251 options.PerformValidation = CausesValidation && Page != null && Page.AreValidatorsUplevel (ValidationGroup);
252 if (options.PerformValidation)
253 options.ValidationGroup = ValidationGroup;
263 bool LoadPostData (string postDataKey, NameValueCollection postCollection)
266 string unique = UniqueID;
267 x = postCollection [unique + ".x"];
268 y = postCollection [unique + ".y"];
269 if (x != null && x != "" && y != null && y != "") {
270 pos_x = Int32.Parse(x);
271 pos_y = Int32.Parse(y);
272 Page.RegisterRequiresRaiseEvent (this);
275 x = postCollection [unique];
276 if (x != null && x != "") {
277 pos_x = Int32.Parse (x);
279 Page.RegisterRequiresRaiseEvent (this);
289 void RaisePostDataChangedEvent ()
291 if (CausesValidation)
293 Page.Validate (ValidationGroup);
298 OnClick (new ImageClickEventArgs (pos_x, pos_y));
299 OnCommand (new CommandEventArgs (CommandName, CommandArgument));
306 void RaisePostBackEvent (string eventArgument)
310 bool IPostBackDataHandler.LoadPostData (string postDataKey, NameValueCollection postCollection)
312 return LoadPostData (postDataKey, postCollection);
316 void IPostBackDataHandler.RaisePostDataChangedEvent ()
318 RaisePostDataChangedEvent ();
321 void IPostBackEventHandler.RaisePostBackEvent (string eventArgument)
323 RaisePostBackEvent (eventArgument);
326 protected virtual void OnClick (ImageClickEventArgs e)
328 if (Events != null) {
329 ImageClickEventHandler eh = (ImageClickEventHandler) (Events [ClickEvent]);
335 protected virtual void OnCommand (CommandEventArgs e)
337 if (Events != null) {
338 CommandEventHandler eh = (CommandEventHandler) (Events [CommandEvent]);
343 RaiseBubbleEvent (this, e);
351 override void OnPreRender (EventArgs e)
354 Page.RegisterRequiresPostBack (this);
357 [WebSysDescription ("")]
358 [WebCategory ("Action")]
359 public event ImageClickEventHandler Click
362 Events.AddHandler (ClickEvent, value);
365 Events.RemoveHandler (ClickEvent, value);
369 [WebSysDescription ("")]
370 [WebCategory ("Action")]
371 public event CommandEventHandler Command
374 Events.AddHandler (CommandEvent, value);
377 Events.RemoveHandler (CommandEvent, value);
382 string IButtonControl.Text
393 event EventHandler IButtonControl.Click
396 throw new NotImplementedException ();
399 throw new NotImplementedException ();