Author: igorz
Date: 2007-07-02 08:58:40 -0400 (Mon, 02 Jul 2007)
New Revision: 81177

Modified:
   trunk/mcs/class/System.Web.Extensions/System.Web.UI/ScriptManager.cs
Log:
Implemented RegisterDataItem methods

Modified: trunk/mcs/class/System.Web.Extensions/System.Web.UI/ScriptManager.cs
===================================================================
--- trunk/mcs/class/System.Web.Extensions/System.Web.UI/ScriptManager.cs        
2007-07-02 12:29:25 UTC (rev 81176)
+++ trunk/mcs/class/System.Web.Extensions/System.Web.UI/ScriptManager.cs        
2007-07-02 12:58:40 UTC (rev 81177)
@@ -107,6 +107,7 @@
                bool _enablePartialRendering = true;
                bool _init;
                string _panelToRefreshID;
+               Dictionary<Control, DataItemEntry> _dataItems;
 
                [DefaultValue (true)]
                [Category ("Behavior")]
@@ -610,11 +611,22 @@
                }
 
                public void RegisterDataItem (Control control, string dataItem) 
{
-                       throw new NotImplementedException ();
+                       RegisterDataItem (control, dataItem, false);
                }
 
                public void RegisterDataItem (Control control, string dataItem, 
bool isJsonSerialized) {
-                       throw new NotImplementedException ();
+                       if (!IsInAsyncPostBack)
+                               throw new InvalidOperationException 
("RegisterDataItem can only be called during an async postback.");
+                       if (control == null)
+                               throw new ArgumentNullException ("control");
+
+                       if (_dataItems == null)
+                               _dataItems = new Dictionary<Control, 
DataItemEntry> ();
+
+                       if (_dataItems.ContainsKey (control))
+                               throw new ArgumentException (String.Format 
("'{0}' already has a data item registered.", control.ID), "control");
+
+                       _dataItems.Add (control, new DataItemEntry (dataItem, 
isJsonSerialized));
                }
 
                public void RegisterDispose (Control control, string 
disposeScript) {
@@ -907,6 +919,12 @@
                        WriteCallbackOutput (output, asyncPostBackTimeout, 
null, AsyncPostBackTimeout.ToString ());
                        WriteCallbackOutput (output, pageTitle, null, 
Page.Title);
 
+                       if (_dataItems != null)
+                               foreach (Control control in _dataItems.Keys) {
+                                       DataItemEntry entry = _dataItems 
[control];
+                                       WriteCallbackOutput (output, 
entry.IsJsonSerialized ? dataItemJson : dataItem, control.ClientID, 
entry.DataItem);
+                               }
+                       
                        WriteArrayDeclarations (output);
                        WriteScriptBlocks (output, _clientScriptBlocks);
                        WriteScriptBlocks (output, _scriptIncludes);
@@ -1205,8 +1223,8 @@
 
                sealed class ScriptReferenceEntry
                {
-                       public readonly Control _control;
-                       public readonly ScriptReference _scriptReference;
+                       readonly Control _control;
+                       readonly ScriptReference _scriptReference;
 
                        public Control Control { get { return _control; } }
                        public ScriptReference ScriptReference { get { return 
_scriptReference; } }
@@ -1216,5 +1234,19 @@
                                _scriptReference = scriptReference;
                        }
                }
+
+               sealed class DataItemEntry
+               {
+                       readonly string _dataItem;
+                       readonly bool _isJsonSerialized;
+
+                       public string DataItem { get { return _dataItem; } }
+                       public bool IsJsonSerialized { get { return 
_isJsonSerialized; } }
+
+                       public DataItemEntry (string dataItem, bool 
isJsonSerialized) {
+                               _dataItem = dataItem;
+                               _isJsonSerialized = isJsonSerialized;
+                       }
+               }
        }
 }

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to