+2005-10-25 Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+ * TemplateControl.cs:
+ * PartialCachingControl.cs: if a control is cacheable, LoadControl
+ returns a PartialCachingControl that holds the VaryBy* and takes care
+ of partial caching and rendering. Fixes bug #76547.
+
2005-10-17 Gonzalo Paniagua Javier <gonzalo@ximian.com>
* Page.cs: don't cache the 'Validate()' results. IsValid retests
//
// Author:
// Andreas Nahr (ClassDevelopment@A-SoftTech.com)
+// Gonzalo Paniagua Javier (gonzalo@ximian.com)
//
// (C) 2003 Andreas Nahr
// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
[AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
public class PartialCachingControl : BasePartialCachingControl
{
+ Type type;
+ Control control;
- //private Type controlType;
- private Control createdControl;
-
- internal PartialCachingControl (Type createCachedControlType)
+ internal PartialCachingControl (Type type)
{
- // controlType = createCachedControlType;
+ this.type = type;
+
}
- [MonoTODO ("Implement")]
- internal override Control CreateControl()
+ internal override Control CreateControl ()
{
- createdControl = null;
- throw new NotImplementedException ();
+ control = (Control) Activator.CreateInstance (type);
+ if (control is UserControl)
+ ((UserControl) control).InitializeAsUserControl (Page);
+
+ return control;
}
public Control CachedControl {
- get {return createdControl;}
+ get { return control; }
}
}
}
+
if (virtualPath == null)
throw new HttpException ("virtualPath is null");
#endif
- object control = Activator.CreateInstance (GetTypeFromControlPath (virtualPath));
+ Type type = GetTypeFromControlPath (virtualPath);
+ object [] attrs = type.GetCustomAttributes (typeof (PartialCachingAttribute), true);
+ if (attrs != null && attrs.Length == 1) {
+ PartialCachingAttribute attr = (PartialCachingAttribute) attrs [0];
+ PartialCachingControl ctrl = new PartialCachingControl (type);
+ ctrl.VaryByParams = attr.VaryByParams;
+ ctrl.VaryByControls = attr.VaryByControls;
+ ctrl.VaryByCustom = attr.VaryByCustom;
+ return ctrl;
+ }
+
+ object control = Activator.CreateInstance (type);
if (control is UserControl)
((UserControl) control).InitializeAsUserControl (Page);