[asp.net] Fix for bug #685267. ClientScriptManager generates correct post-back event...
[mono.git] / mcs / class / System.Web / System.Web.UI / TemplateControl.jvm.cs
index 165a761e593cf4b221ea034c00dcc6bebcd13140..28a3f0f79701368095398228423a5c8e96c451a4 100644 (file)
@@ -33,6 +33,7 @@ using System.Web.J2EE;
 using System.Xml;
 using vmw.common;
 using System.Web.Util;
+using System.Collections.Generic;
 
 namespace System.Web.UI {
 
@@ -104,7 +105,7 @@ namespace System.Web.UI {
                                                BindingFlags.NonPublic |
                                                BindingFlags.Instance;
 
-               private byte [] GetResourceBytes (Type type)
+               byte [] GetResourceBytes (Type type)
                {
                        Hashtable table = (Hashtable) AppDomain.CurrentDomain.GetData ("TemplateControl.RES_BYTES");
                        if (table == null) {
@@ -112,7 +113,7 @@ namespace System.Web.UI {
                        }
                        return (byte []) table [type];
                }
-               private void SetResourceBytes (Type type, byte [] bytes)
+               void SetResourceBytes (Type type, byte [] bytes)
                {
                        Hashtable table = (Hashtable) AppDomain.CurrentDomain.GetData ("TemplateControl.RES_BYTES");
                        if (table == null) {
@@ -123,7 +124,7 @@ namespace System.Web.UI {
                        return;
                }
 
-               private Hashtable ResourceHash
+               Hashtable ResourceHash
                {
                        get
                        {
@@ -140,7 +141,7 @@ namespace System.Web.UI {
                        }
                }
 
-               private string CachedString (Type type, int offset, int size)
+               string CachedString (Type type, int offset, int size)
                {
                        CacheKey key = new CacheKey (type, offset, size);
 
@@ -239,7 +240,24 @@ namespace System.Web.UI {
                                typeof (object),
                                typeof (EventArgs) };
 
+                LifeCycleEvent[] _pageEvents = new LifeCycleEvent[] { 
+                    LifeCycleEvent.PreInit,
+                    LifeCycleEvent.PreLoad,
+                    LifeCycleEvent.LoadComplete,
+                    LifeCycleEvent.PreRenderComplete,
+                    LifeCycleEvent.SaveStateComplete,
+                    LifeCycleEvent.InitComplete
+                };
+                List<LifeCycleEvent> pageEvents = new List<LifeCycleEvent>(_pageEvents);
+
+                bool isPage = Page.GetType().IsAssignableFrom(GetType());
+
                                for (int i = 0; i < methodNames.Length; i++) {
+                    
+                    // Don't look for page-only events in non-page controls.
+                    if (!isPage && pageEvents.Contains((LifeCycleEvent)i))
+                        continue;
+
                                        string methodName = methodNames [i];
                                        MethodInfo method;
                                        bool noParams = false;
@@ -546,7 +564,7 @@ namespace System.Web.UI {
                        }
                }
 
-               sealed private class CacheKey
+               sealed class CacheKey
                {
                        readonly Type _type;
                        readonly int _offset;