check the _controls is not null
[mono.git] / mcs / class / System.Web / System.Web.UI / Control.cs
index fa0785ecd4feaac5a79c24de680ad45c82bd9325..229d46dcc897e92e94a5de9a14cc968e7edaba92 100644 (file)
@@ -115,6 +115,8 @@ namespace System.Web.UI
                 private RenderMethod _renderMethodDelegate = null;\r
                private bool autoID = true;\r
                private bool creatingControls = false;\r
+               private bool bindingContainer = true;\r
+               private bool autoEventWireup = true;\r
                \r
                    private DataBindingCollection dataBindings = null;\r
 \r
@@ -127,7 +129,7 @@ namespace System.Web.UI
                {\r
                        get {\r
                                Control container = NamingContainer;\r
-                               if (_isNamingContainer)\r
+                               if (!container.bindingContainer)\r
                                        container = container.BindingContainer;\r
                                return container;\r
                        }\r
@@ -220,12 +222,9 @@ namespace System.Web.UI
                                 _site = value;\r
                         }\r
                 }\r
-                public virtual string TemplateSourceDirectory\r
-                {\r
-                        get\r
-                        {\r
-                                return Context.Request.ApplicationPath; //TODO: Dont think this is right.\r
-                        }\r
+\r
+                public virtual string TemplateSourceDirectory {\r
+                        get { return (_parent == null) ? String.Empty : _parent.TemplateSourceDirectory; }\r
                 }\r
 \r
                                [MonoTODO]\r
@@ -322,6 +321,7 @@ namespace System.Web.UI
                                return _viewState;\r
                         }\r
                 }\r
+\r
                 protected virtual bool ViewStateIgnoresCase\r
                 {\r
                         get {\r
@@ -329,6 +329,16 @@ namespace System.Web.UI
                         }\r
                 }\r
 \r
+               internal bool AutoEventWireup {\r
+                       get { return autoEventWireup; }\r
+                       set { autoEventWireup = value; }\r
+               }\r
+\r
+               internal void SetBindingContainer (bool isBC)\r
+               {\r
+                       bindingContainer = isBC;\r
+               }\r
+               \r
                private int defaultNumberID;\r
                protected internal virtual void AddedControl (Control control, int index)\r
                {\r
@@ -345,7 +355,7 @@ namespace System.Web.UI
                                control._namingContainer = namingContainer;\r
                        \r
                        if (control.AutoID == true && control.ID == null)\r
-                               control.ID = "_ctrl_" + defaultNumberID++;\r
+                               control.ID = ID + "_ctrl_" + defaultNumberID++;\r
                }\r
 \r
                 protected virtual void AddParsedSubObject(object obj) //DIT\r
@@ -410,13 +420,13 @@ namespace System.Web.UI
                                ViewState.LoadViewState (savedState);\r
                 }\r
                 \r
-               [MonoTODO]\r
+               [MonoTODO("Secure?")]\r
                 protected string MapPathSecure(string virtualPath)\r
                 {\r
-                        //TODO: Need to read up on security+web.\r
-                       //Return the same path. So AdRotator can read its config file.\r
-                       return virtualPath;\r
+                       string combined = UrlUtils.Combine (TemplateSourceDirectory, virtualPath);\r
+                       return Context.Request.MapPath (combined);\r
                 }\r
+\r
                 protected virtual bool OnBubbleEvent(object source, EventArgs args) //DIT\r
                 {\r
                         return false;\r
@@ -637,8 +647,15 @@ namespace System.Web.UI
 \r
                 protected void PreRenderRecursiveInternal()\r
                 {\r
-                        OnPreRender(EventArgs.Empty);\r
-                        if (_controls != null) foreach (Control c in _controls) c.PreRenderRecursiveInternal();\r
+                       if (_visible) {\r
+                               EnsureChildControls ();\r
+                               OnPreRender (EventArgs.Empty);\r
+                               if (_controls == null)\r
+                                       return;\r
+\r
+                               foreach (Control c in _controls)\r
+                                       c.PreRenderRecursiveInternal ();\r
+                       }\r
                 }\r
 \r
                 protected void InitRecursive(Control namingContainer)\r
@@ -661,7 +678,7 @@ namespace System.Web.UI
                                        controlList = new ArrayList ();\r
                                        controlStates = new ArrayList ();\r
                                }\r
-                               controlList.Add (ctrl);\r
+                               controlList.Add (ctrl.ID);\r
                                controlStates.Add (ctrl.SaveViewStateRecursive ());\r
                        }\r
                                \r
@@ -682,8 +699,9 @@ namespace System.Web.UI
                        ArrayList controlStates = savedInfo.Third as ArrayList;\r
                        int nControls = controlList.Count;\r
                        for (int i = 0; i < nControls; i++) {\r
-                               if (controlStates != null)\r
-                                       Controls [i].LoadViewStateRecursive (controlStates [i]);\r
+                               Control c = FindControl ((string) controlList [i]);\r
+                               if (c != null && controlStates != null)\r
+                                       c.LoadViewStateRecursive (controlStates [i]);\r
                        }\r
                 }\r
                 \r