1 //
2 // Permission is hereby granted, free of charge, to any person obtaining
3 // a copy of this software and associated documentation files (the
4 // "Software"), to deal in the Software without restriction, including
5 // without limitation the rights to use, copy, modify, merge, publish,
6 // distribute, sublicense, and/or sell copies of the Software, and to
7 // permit persons to whom the Software is furnished to do so, subject to
8 // the following conditions:
9 //
10 // The above copyright notice and this permission notice shall be
11 // included in all copies or substantial portions of the Software.
12 //
13 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
14 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
15 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
16 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
17 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
18 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
19 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20 //
21 //
22 // System.Web.UI.HtmlControls.HtmlButton
23 //
24 // Authors:
25 //	Jackson Harper (jackson@ximian.com)
26 //
27 // (C) 2005-2010 Novell, Inc.
28 
29 
30 using System.ComponentModel;
31 using System.Security.Permissions;
32 
33 namespace System.Web.UI.HtmlControls {
34 
35 	// CAS
36 	[AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
37 	[AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
38 	// attributes
39 	[DefaultEvent("ServerClick")]
40 	[SupportsEventValidation]
41 	public class HtmlButton : HtmlContainerControl, IPostBackEventHandler {
42 
43 		static readonly object ServerClickEvent = new object();
44 
HtmlButton()45 		public HtmlButton () : base ("button")
46 		{
47 		}
48 
49 		[DefaultValue(true)]
50 		[WebSysDescription("")]
51 		[WebCategory("Behavior")]
52 		public virtual bool CausesValidation {
53 			get {
54 				return ViewState.GetBool ("CausesValidation", true);
55 			}
56 			set {
57 				ViewState ["CausesValidation"] = value;
58 			}
59 		}
60 
61 		[DefaultValue ("")]
62 		public virtual string ValidationGroup
63 		{
64 			get {
65 				return ViewState.GetString ("ValidationGroup", "");
66 			}
67 			set {
68 				ViewState ["ValidationGroup"] = value;
69 			}
70 		}
IPostBackEventHandler.RaisePostBackEvent(string eventArgument)71 		void IPostBackEventHandler.RaisePostBackEvent (string eventArgument)
72 		{
73 			RaisePostBackEvent (eventArgument);
74 		}
75 
RaisePostBackEvent(string eventArgument)76 		protected virtual void RaisePostBackEvent (string eventArgument)
77 		{
78 			ValidateEvent (UniqueID, eventArgument);
79 			if (CausesValidation)
80 				Page.Validate (ValidationGroup);
81 			OnServerClick (EventArgs.Empty);
82 		}
83 
OnPreRender(EventArgs e)84 		protected internal override void OnPreRender (EventArgs e)
85 		{
86 			base.OnPreRender (e);
87 		}
88 
OnServerClick(EventArgs e)89 		protected virtual void OnServerClick (EventArgs e)
90 		{
91 			EventHandler server_click = (EventHandler) Events [ServerClickEvent];
92 			if (server_click != null)
93 				server_click (this, e);
94 		}
95 
RenderAttributes(HtmlTextWriter writer)96 		protected override void RenderAttributes (HtmlTextWriter writer)
97 		{
98 			Page page = Page;
99 			if (page != null && Events [ServerClickEvent] != null) {
100 				PostBackOptions options = GetPostBackOptions ();
101 				Attributes ["onclick"] += page.ClientScript.GetPostBackEventReference (options, true);
102 				writer.WriteAttribute ("language", "javascript");
103 			}
104 
105 			base.RenderAttributes (writer);
106 		}
107 
GetPostBackOptions()108 		PostBackOptions GetPostBackOptions ()
109 		{
110 			Page page = Page;
111 			PostBackOptions options = new PostBackOptions (this);
112 			options.ValidationGroup = null;
113 			options.ActionUrl = null;
114 			options.Argument = String.Empty;
115 			options.RequiresJavaScriptProtocol = false;
116 			options.ClientSubmit = true;
117 			options.PerformValidation = CausesValidation && page != null && page.AreValidatorsUplevel (ValidationGroup);
118 			if (options.PerformValidation)
119 				options.ValidationGroup = ValidationGroup;
120 
121 			return options;
122 		}
123 
124 		[WebSysDescription("")]
125 		[WebCategory("Action")]
126 		public event EventHandler ServerClick {
127 			add { Events.AddHandler (ServerClickEvent, value); }
128 			remove { Events.RemoveHandler (ServerClickEvent, value); }
129 		}
130 	}
131 }
132 
133