2006-12-17 Igor Zelmanovich <igorz@mainsoft.com>
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / HiddenField.cs
index e379da2c0f7208bd0464dc875f851cb44f691525..b43ffc417ce5af3f0a199a07e125b3405c0c8a45 100644 (file)
 
 #if NET_2_0
 using System.Web.UI;
+using System.ComponentModel;
 
 namespace System.Web.UI.WebControls
 {
-       public class HiddenField : Control
+       public class HiddenField : Control, IPostBackDataHandler
        {
+
+               static readonly object ValueChangedEvent = new object ();
+
+               public event EventHandler ValueChanged
+               {
+                       add { Events.AddHandler (ValueChangedEvent, value); }
+                       remove { Events.RemoveHandler (ValueChangedEvent, value); }
+               }
+
+               [Bindable (true)]
+               public virtual string Value {
+                       get {
+                               return ViewState.GetString ("Value", "");
+                       }
+                       set {
+                               ViewState ["Value"] = value;
+                       }
+               }
+
+               public override bool EnableTheming {
+                       get {
+                               return false;
+                       }
+                       set {
+                               throw new NotSupportedException ();
+                       }
+               }
+
+               public override string SkinID {
+                       get {
+                               return String.Empty;
+                       }
+                       set {
+                               throw new NotSupportedException ();
+                       }
+               }
+
+               public override void Focus ()
+               {
+                       throw new NotSupportedException ();
+               }
+
+               protected virtual void OnValueChanged (EventArgs e)
+               {
+                       EventHandler h = (EventHandler) Events [ValueChangedEvent];
+                       if (h != null)
+                               h (this, e);
+               }
+
+               protected virtual bool LoadPostData (string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
+               {
+                       if (Value != postCollection [postDataKey]) {
+                               Value = postCollection [postDataKey];
+                               return true;
+                       }
+                       return false;
+               }
+
+               protected virtual void RaisePostDataChangedEvent ()
+               {
+                       OnValueChanged (EventArgs.Empty);
+               }
+
+               protected override ControlCollection CreateControlCollection ()
+               {
+                       return new System.Web.UI.EmptyControlCollection (this);
+               }
+
+               protected internal override void OnPreRender (EventArgs e)
+               {
+                       base.OnPreRender (e);
+               }
+
+               protected internal override void Render (HtmlTextWriter writer)
+               {
+                       writer.AddAttribute (HtmlTextWriterAttribute.Type, "hidden");
+
+                       if (!String.IsNullOrEmpty (ClientID))
+                               writer.AddAttribute (HtmlTextWriterAttribute.Id, ClientID);
+
+                       if (!String.IsNullOrEmpty (UniqueID))
+                               writer.AddAttribute (HtmlTextWriterAttribute.Name, UniqueID);
+
+                       if (!String.IsNullOrEmpty (Value))
+                               writer.AddAttribute (HtmlTextWriterAttribute.Value, Value);
+
+                       writer.RenderBeginTag (HtmlTextWriterTag.Input);
+                       writer.RenderEndTag (); 
+               }
+
+               #region IPostBackDataHandler Members
+
+               bool IPostBackDataHandler.LoadPostData (string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
+               {
+                       return LoadPostData (postDataKey, postCollection);
+               }
+
+               void IPostBackDataHandler.RaisePostDataChangedEvent ()
+               {
+                       RaisePostDataChangedEvent ();
+               }
+
+               #endregion
        }
 }
 #endif