X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem.Web%2FSystem.Web.UI%2FPageParser.cs;h=f5f4899f05924e40be2e4c53782416000689666a;hb=879970ea20a49e63a5413adec014754b30a53e03;hp=7ba66ff822e05ba298ccf7eb5cfee8642610b41f;hpb=cc9fa96a3163b4ac0b2df0726c72963017d802d6;p=mono.git diff --git a/mcs/class/System.Web/System.Web.UI/PageParser.cs b/mcs/class/System.Web/System.Web.UI/PageParser.cs index 7ba66ff822e..f5f4899f059 100644 --- a/mcs/class/System.Web/System.Web.UI/PageParser.cs +++ b/mcs/class/System.Web/System.Web.UI/PageParser.cs @@ -5,7 +5,7 @@ // Gonzalo Paniagua Javier (gonzalo@ximian.com) // // (C) 2002,2003 Ximian, Inc (http://www.ximian.com) -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) +// Copyright (C) 2005-2010 Novell, Inc (http://www.novell.com) // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the @@ -34,6 +34,7 @@ using System.Security.Permissions; using System.Text; using System.Web.Compilation; using System.Web.Configuration; +using System.Web.Hosting; using System.Web.Util; using System.IO; @@ -43,39 +44,97 @@ namespace System.Web.UI [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] public sealed class PageParser : TemplateControlParser { +#if NET_4_0 + static Type defaultPageBaseType; + static Type defaultApplicationBaseType; + static Type defaultPageParserFilterType; + static Type defaultUserControlBaseType; + static bool enableLongStringsAsResources = true; +#endif PagesEnableSessionState enableSessionState = PagesEnableSessionState.True; - bool enableViewStateMac = true; + bool enableViewStateMac; + bool enableViewStateMacSet; bool smartNavigation; bool haveTrace; bool trace; bool notBuffer; TraceMode tracemode = TraceMode.Default; - string responseEncoding; string contentType; - int codepage = -1; - int lcid = -1; + MainDirectiveAttribute codepage; + MainDirectiveAttribute responseEncoding; + MainDirectiveAttribute lcid; + MainDirectiveAttribute clientTarget; + MainDirectiveAttribute masterPage; + MainDirectiveAttribute title; + MainDirectiveAttribute theme; +#if NET_4_0 + MainDirectiveAttribute metaDescription; + MainDirectiveAttribute metaKeywords; +#endif string culture; string uiculture; string errorPage; bool validateRequest; - string clientTarget; - Type baseType = typeof (Page); - -#if NET_2_0 bool async; int asyncTimeout = -1; - string masterPage; Type masterType; - string title; - string theme; + string masterVirtualPath; string styleSheetTheme; bool enable_event_validation; bool maintainScrollPositionOnPostBack; int maxPageStateFieldLength = -1; - string pageParserFilter = String.Empty; Type previousPageType; -#endif + string previousPageVirtualPath; +#if NET_4_0 + public static bool EnableLongStringsAsResources { + get { return enableLongStringsAsResources; } + set { + BuildManager.AssertPreStartMethodsRunning (); + enableLongStringsAsResources = value; + } + } + + public static Type DefaultPageBaseType { + get { return defaultPageBaseType; } + set { + BuildManager.AssertPreStartMethodsRunning (); + if (value != null && !typeof (Page).IsAssignableFrom (value)) + throw new ArgumentException (String.Format ("The value assigned to property '{0}' is invalid.", "DefaultPageBaseType")); + + defaultPageBaseType = value; + } + } + public static Type DefaultApplicationBaseType { + get { return defaultApplicationBaseType; } + set { + BuildManager.AssertPreStartMethodsRunning (); + if (value != null && !typeof (HttpApplication).IsAssignableFrom (value)) + throw new ArgumentException (String.Format ("The value assigned to property '{0}' is invalid.", "DefaultApplicationBaseType")); + defaultApplicationBaseType = value; + } + } + + public static Type DefaultPageParserFilterType { + get { return defaultPageParserFilterType; } + set { + BuildManager.AssertPreStartMethodsRunning (); + if (value != null && !typeof (PageParserFilter).IsAssignableFrom (value)) + throw new ArgumentException (String.Format ("The value assigned to property '{0}' is invalid.", "DefaultPageParserFilterType")); + defaultPageParserFilterType = value; + } + } + + public static Type DefaultUserControlBaseType { + get { return defaultUserControlBaseType; } + set { + if (value != null && !typeof (UserControl).IsAssignableFrom (value)) + throw new ArgumentException (String.Format ("The value assigned to property '{0}' is invalid.", "DefaultUserControlBaseType")); + BuildManager.AssertPreStartMethodsRunning (); + defaultUserControlBaseType = value; + } + } +#endif public PageParser () { LoadConfigDefaults (); @@ -83,177 +142,171 @@ namespace System.Web.UI internal PageParser (string virtualPath, string inputFile, HttpContext context) { + this.VirtualPath = new VirtualPath (virtualPath); Context = context; - BaseVirtualDir = UrlUtils.GetDirectory (virtualPath); + BaseVirtualDir = VirtualPathUtility.GetDirectory (virtualPath, false); InputFile = inputFile; SetBaseType (null); AddApplicationAssembly (); LoadConfigDefaults (); -#if NET_2_0 - this.VirtualPath = new VirtualPath (virtualPath); -#endif } -#if NET_2_0 - internal PageParser (string virtualPath, TextReader reader, HttpContext context) + internal PageParser (VirtualPath virtualPath, TextReader reader, HttpContext context) : this (virtualPath, null, reader, context) { } - internal PageParser (string virtualPath, string inputFile, TextReader reader, HttpContext context) + internal PageParser (VirtualPath virtualPath, string inputFile, TextReader reader, HttpContext context) { + this.VirtualPath = virtualPath; Context = context; - BaseVirtualDir = UrlUtils.GetDirectory (virtualPath); + BaseVirtualDir = virtualPath.DirectoryNoNormalize; Reader = reader; - if (String.IsNullOrEmpty (inputFile)) { - HttpRequest req = context != null ? context.Request : null; - if (req != null) - InputFile = req.MapPath (virtualPath); - } else + if (String.IsNullOrEmpty (inputFile)) + InputFile = virtualPath.PhysicalPath; + else InputFile = inputFile; SetBaseType (null); AddApplicationAssembly (); LoadConfigDefaults (); -#if NET_2_0 - this.VirtualPath = new VirtualPath (virtualPath); -#endif } -#endif internal override void LoadConfigDefaults () { base.LoadConfigDefaults (); -#if NET_2_0 PagesSection ps = PagesConfig; -#else - PagesConfiguration ps = PagesConfig; -#endif notBuffer = !ps.Buffer; enableSessionState = ps.EnableSessionState; enableViewStateMac = ps.EnableViewStateMac; smartNavigation = ps.SmartNavigation; validateRequest = ps.ValidateRequest; -#if NET_2_0 - masterPage = ps.MasterPageFile; - if (masterPage.Length == 0) - masterPage = null; + + string value = ps.MasterPageFile; + if (value.Length > 0) + masterPage = new MainDirectiveAttribute (value, true); enable_event_validation = ps.EnableEventValidation; maxPageStateFieldLength = ps.MaxPageStateFieldLength; - pageParserFilter = ps.PageParserFilterType; - theme = ps.Theme; - if (theme.Length == 0) - theme = null; + value = ps.Theme; + if (value.Length > 0) + theme = new MainDirectiveAttribute (value, true); + styleSheetTheme = ps.StyleSheetTheme; if (styleSheetTheme.Length == 0) styleSheetTheme = null; maintainScrollPositionOnPostBack = ps.MaintainScrollPositionOnPostBack; -#endif } - public static IHttpHandler GetCompiledPageInstance (string virtualPath, - string inputFile, - HttpContext context) + public static IHttpHandler GetCompiledPageInstance (string virtualPath, string inputFile, HttpContext context) { -#if NET_2_0 - return BuildManager.CreateInstanceFromVirtualPath (virtualPath, typeof (IHttpHandler)) as IHttpHandler; -#else - PageParser pp = new PageParser (virtualPath, inputFile, context); - IHttpHandler h = (IHttpHandler) pp.GetCompiledInstance (); - return h; -#endif + bool isFake = false; + + if (!String.IsNullOrEmpty (inputFile)) + isFake = !inputFile.StartsWith (HttpRuntime.AppDomainAppPath); + + return BuildManager.CreateInstanceFromVirtualPath (new VirtualPath (virtualPath, inputFile, isFake), typeof (IHttpHandler)) as IHttpHandler; } - - internal override void ProcessMainAttributes (Hashtable atts) + + internal override void ProcessMainAttributes (IDictionary atts) { // note: the 'enableSessionState' configuration property is // processed in a case-sensitive manner while the page-level // attribute is processed case-insensitive string enabless = GetString (atts, "EnableSessionState", null); if (enabless != null) { - if (String.Compare (enabless, "readonly", true) == 0) + if (String.Compare (enabless, "readonly", true, Helpers.InvariantCulture) == 0) enableSessionState = PagesEnableSessionState.ReadOnly; - else if (String.Compare (enabless, "true", true) == 0) + else if (String.Compare (enabless, "true", true, Helpers.InvariantCulture) == 0) enableSessionState = PagesEnableSessionState.True; - else if (String.Compare (enabless, "false", true) == 0) + else if (String.Compare (enabless, "false", true, Helpers.InvariantCulture) == 0) enableSessionState = PagesEnableSessionState.False; else ThrowParseException ("Invalid value for enableSessionState: " + enabless); } - string cp = GetString (atts, "CodePage", null); - if (cp != null) { + string value = GetString (atts, "CodePage", null); + if (value != null) { if (responseEncoding != null) - ThrowParseException ("CodePage and ResponseEncoding are " + - "mutually exclusive."); + ThrowParseException ("CodePage and ResponseEncoding are mutually exclusive."); + + if (!BaseParser.IsExpression (value)) { + int cpval = -1; - int codepage = 0; - try { - codepage = (int) UInt32.Parse (cp); - } catch { - ThrowParseException ("Invalid value for CodePage: " + cp); - } + try { + cpval = (int) UInt32.Parse (value); + } catch { + ThrowParseException ("Invalid value for CodePage: " + value); + } - try { - Encoding.GetEncoding (codepage); - } catch { - ThrowParseException ("Unsupported codepage: " + cp); - } + try { + Encoding.GetEncoding (cpval); + } catch { + ThrowParseException ("Unsupported codepage: " + value); + } + codepage = new MainDirectiveAttribute (cpval, true); + } else + codepage = new MainDirectiveAttribute (value); } - responseEncoding = GetString (atts, "ResponseEncoding", null); - if (responseEncoding != null) { - if (codepage != -1) - ThrowParseException ("CodePage and ResponseEncoding are " + - "mutually exclusive."); - - try { - Encoding.GetEncoding (responseEncoding); - } catch { - ThrowParseException ("Unsupported encoding: " + responseEncoding); - } + value = GetString (atts, "ResponseEncoding", null); + if (value != null) { + if (codepage != null) + ThrowParseException ("CodePage and ResponseEncoding are mutually exclusive."); + + if (!BaseParser.IsExpression (value)) { + try { + Encoding.GetEncoding (value); + } catch { + ThrowParseException ("Unsupported encoding: " + value); + } + responseEncoding = new MainDirectiveAttribute (value, true); + } else + responseEncoding = new MainDirectiveAttribute (value); } contentType = GetString (atts, "ContentType", null); - string lcidStr = GetString (atts, "LCID", null); - if (lcidStr != null) { - try { - lcid = (int) UInt32.Parse (lcidStr); - } catch { - ThrowParseException ("Invalid value for LCID: " + lcid); - } + value = GetString (atts, "LCID", null); + if (value != null) { + if (!BaseParser.IsExpression (value)) { + int parsedLcid = -1; + try { + parsedLcid = (int) UInt32.Parse (value); + } catch { + ThrowParseException ("Invalid value for LCID: " + value); + } - CultureInfo ci = null; - try { - ci = new CultureInfo (lcid); - } catch { - ThrowParseException ("Unsupported LCID: " + lcid); - } + CultureInfo ci = null; + try { + ci = new CultureInfo (parsedLcid); + } catch { + ThrowParseException ("Unsupported LCID: " + value); + } - if (ci.IsNeutralCulture) { - string suggestedCulture = SuggestCulture (ci.Name); - string fmt = "LCID attribute must be set to a non-neutral Culture."; - if (suggestedCulture != null) { - ThrowParseException (fmt + " Please try one of these: " + - suggestedCulture); - } else { - ThrowParseException (fmt); + if (ci.IsNeutralCulture) { + string suggestedCulture = SuggestCulture (ci.Name); + string fmt = "LCID attribute must be set to a non-neutral Culture."; + if (suggestedCulture != null) { + ThrowParseException (fmt + " Please try one of these: " + + suggestedCulture); + } else { + ThrowParseException (fmt); + } } - } + lcid = new MainDirectiveAttribute (parsedLcid, true); + } else + lcid = new MainDirectiveAttribute (value); } culture = GetString (atts, "Culture", null); if (culture != null) { - if (lcidStr != null) + if (lcid != null) ThrowParseException ("Culture and LCID are mutually exclusive."); CultureInfo ci = null; try { -#if NET_2_0 if (!culture.StartsWith ("auto")) -#endif ci = new CultureInfo (culture); } catch { ThrowParseException ("Unsupported Culture: " + culture); @@ -274,9 +327,7 @@ namespace System.Web.UI if (uiculture != null) { CultureInfo ci = null; try { -#if NET_2_0 if (!uiculture.StartsWith ("auto")) -#endif ci = new CultureInfo (uiculture); } catch { ThrowParseException ("Unsupported Culture: " + uiculture); @@ -316,47 +367,30 @@ namespace System.Web.UI errorPage = GetString (atts, "ErrorPage", null); validateRequest = GetBool (atts, "ValidateRequest", validateRequest); - clientTarget = GetString (atts, "ClientTarget", null); - if (clientTarget != null) { - clientTarget = clientTarget.Trim (); -#if NET_2_0 - ClientTargetSection sec = (ClientTargetSection)WebConfigurationManager.GetSection ("system.web/clientTarget"); - ClientTarget ct = null; + value = GetString (atts, "ClientTarget", null); + if (value != null) { + if (!BaseParser.IsExpression (value)) { + value = value.Trim (); + + ClientTargetSection sec = GetConfigSection ("system.web/clientTarget"); + ClientTarget ct = null; - if ((ct = sec.ClientTargets [clientTarget]) == null) - clientTarget = clientTarget.ToLower (CultureInfo.InvariantCulture); + if ((ct = sec.ClientTargets [value]) == null) + value = value.ToLowerInvariant (); - if (ct == null && (ct = sec.ClientTargets [clientTarget]) == null) { - ThrowParseException (String.Format ( - "ClientTarget '{0}' is an invalid alias. See the " + - "documentation for config. section.", - clientTarget)); - } - clientTarget = ct.UserAgent; -#else - NameValueCollection coll; - coll = (NameValueCollection) Context.GetConfig ("system.web/clientTarget"); - object ct = null; - - if (coll != null) { - ct = coll [clientTarget]; - if (ct == null) - ct = coll [clientTarget.ToLower ()]; - } - - if (ct == null) { - ThrowParseException (String.Format ( - "ClientTarget '{0}' is an invalid alias. See the " + - "documentation for config. section.", - clientTarget)); - } - clientTarget = (string) ct; -#endif + if (ct == null && (ct = sec.ClientTargets [value]) == null) { + ThrowParseException (String.Format ( + "ClientTarget '{0}' is an invalid alias. See the " + + "documentation for config. section.", + clientTarget)); + } + value = ct.UserAgent; + clientTarget = new MainDirectiveAttribute (value, true); + } else + clientTarget = new MainDirectiveAttribute (value); } notBuffer = !GetBool (atts, "Buffer", true); - -#if NET_2_0 async = GetBool (atts, "Async", false); string asyncTimeoutVal = GetString (atts, "AsyncTimeout", null); if (asyncTimeoutVal != null) { @@ -367,40 +401,82 @@ namespace System.Web.UI } } - masterPage = GetString (atts, "MasterPageFile", masterPage); + value = GetString (atts, "MasterPageFile", masterPage != null ? masterPage.Value : null); + if (!String.IsNullOrEmpty (value)) { + if (!BaseParser.IsExpression (value)) { + value = System.Web.VirtualPathUtility.Combine(BaseVirtualDir, value); + var vpp = HostingEnvironment.VirtualPathProvider; + if (!vpp.FileExists (value)) + ThrowParseFileNotFound (value); + value = vpp.CombineVirtualPaths (VirtualPath.Absolute, VirtualPathUtility.ToAbsolute (value)); + AddDependency (value, false); + masterPage = new MainDirectiveAttribute (value, true); + } else + masterPage = new MainDirectiveAttribute (value); + } - // Make sure the page exists - if (!String.IsNullOrEmpty (masterPage)) { - BuildManager.GetCompiledType (masterPage); - AddDependency (masterPage); + value = GetString(atts, "Title", null); + if (value != null) { + if (!BaseParser.IsExpression (value)) + title = new MainDirectiveAttribute (value, true); + else + title = new MainDirectiveAttribute (value); + } + + value = GetString (atts, "Theme", theme != null ? theme.Value : null); + if (value != null) { + if (!BaseParser.IsExpression (value)) + theme = new MainDirectiveAttribute (value, true); + else + theme = new MainDirectiveAttribute (value); } - title = GetString(atts, "Title", null); - - theme = GetString (atts, "Theme", theme); styleSheetTheme = GetString (atts, "StyleSheetTheme", styleSheetTheme); - enable_event_validation = GetBool (atts, "EnableEventValidation", true); + enable_event_validation = GetBool (atts, "EnableEventValidation", enable_event_validation); maintainScrollPositionOnPostBack = GetBool (atts, "MaintainScrollPositionOnPostBack", maintainScrollPositionOnPostBack); + + if (atts.Contains ("EnableViewStateMac")) { + enableViewStateMac = GetBool (atts, "EnableViewStateMac", enableViewStateMac); + enableViewStateMacSet = true; + } +#if NET_4_0 + value = GetString (atts, "MetaDescription", null); + if (value != null) { + if (!BaseParser.IsExpression (value)) + metaDescription = new MainDirectiveAttribute (value, true); + else + metaDescription = new MainDirectiveAttribute (value); + } + + value = GetString (atts, "MetaKeywords", null); + if (value != null) { + if (!BaseParser.IsExpression (value)) + metaKeywords = new MainDirectiveAttribute (value, true); + else + metaKeywords = new MainDirectiveAttribute (value); + } #endif // Ignored by now - GetString (atts, "EnableViewStateMac", null); GetString (atts, "SmartNavigation", null); base.ProcessMainAttributes (atts); } -#if NET_2_0 - internal override void AddDirective (string directive, Hashtable atts) - { + internal override void AddDirective (string directive, IDictionary atts) + { bool isMasterType = String.Compare ("MasterType", directive, StringComparison.OrdinalIgnoreCase) == 0; bool isPreviousPageType = isMasterType ? false : String.Compare ("PreviousPageType", directive, StringComparison.OrdinalIgnoreCase) == 0; - + string typeName = null; string virtualPath = null; Type type = null; if (isMasterType || isPreviousPageType) { + PageParserFilter pfilter = PageParserFilter; + if (pfilter != null) + pfilter.PreprocessDirective (directive.ToLowerInvariant (), atts); + typeName = GetString (atts, "TypeName", null); virtualPath = GetString (atts, "VirtualPath", null); @@ -411,22 +487,27 @@ namespace System.Web.UI type = LoadType (typeName); if (type == null) ThrowParseException (String.Format ("Could not load type '{0}'.", typeName)); - } else if (virtualPath != null) { - string mappedPath = MapPath (virtualPath); if (isMasterType) - type = masterType = BuildManager.GetCompiledType (virtualPath); + masterType = type; + else + previousPageType = type; + } else if (!String.IsNullOrEmpty (virtualPath)) { + if (!HostingEnvironment.VirtualPathProvider.FileExists (virtualPath)) + ThrowParseFileNotFound (virtualPath); + + AddDependency (virtualPath, true); + if (isMasterType) + masterVirtualPath = virtualPath; else - type = previousPageType = GetCompiledPageType (virtualPath, mappedPath, - HttpContext.Current); + previousPageVirtualPath = virtualPath; } else - ThrowParseException ( - String.Format ("The {0} directive must have either a TypeName or a VirtualPath attribute.", directive)); + ThrowParseException (String.Format ("The {0} directive must have either a TypeName or a VirtualPath attribute.", directive)); - AddAssembly (type.Assembly, true); + if (type != null) + AddAssembly (type.Assembly, true); } else base.AddDirective (directive, atts); } -#endif static string SuggestCulture (string culture) { @@ -438,17 +519,12 @@ namespace System.Web.UI return retval; } - public static Type GetCompiledPageType (string virtualPath, string inputFile, HttpContext context) + internal Type GetCompiledPageType (string virtualPath, string inputFile, HttpContext context) { -#if NET_2_0 return BuildManager.GetCompiledType (virtualPath); -#else - PageParser pp = new PageParser (virtualPath, inputFile, context); - return pp.CompileIntoType (); -#endif } - protected override Type CompileIntoType () + internal override Type CompileIntoType () { AspGenerator generator = new AspGenerator (this); return generator.GetCompiledType (); @@ -464,6 +540,10 @@ namespace System.Web.UI internal bool EnableViewStateMac { get { return enableViewStateMac; } } + + internal bool EnableViewStateMacSet { + get { return enableViewStateMacSet; } + } internal bool SmartNavigation { get { return smartNavigation; } @@ -486,33 +566,65 @@ namespace System.Web.UI internal TraceMode TraceMode { get { return tracemode; } } +#if NET_4_0 + internal override Type DefaultBaseType { + get { + Type ret = DefaultPageBaseType; + if (ret == null) + return base.DefaultBaseType; -#if NET_2_0 - internal override string DefaultBaseTypeName { - get { return PagesConfig.PageBaseType; } + return ret; + } } -#else +#endif internal override string DefaultBaseTypeName { - get { return "System.Web.UI.Page"; } + get { return PagesConfig.PageBaseType; } } -#endif internal override string DefaultDirectiveName { get { return "page"; } } - internal string ResponseEncoding { - get { return responseEncoding; } - } - internal string ContentType { get { return contentType; } } - internal int CodePage { + internal MainDirectiveAttribute ResponseEncoding { + get { return responseEncoding; } + } + + internal MainDirectiveAttribute CodePage { get { return codepage; } } + internal MainDirectiveAttribute LCID { + get { return lcid; } + } + + internal MainDirectiveAttribute ClientTarget { + get { return clientTarget; } + } + + internal MainDirectiveAttribute MasterPageFile { + get { return masterPage; } + } + + internal MainDirectiveAttribute Title { + get { return title; } + } + + internal MainDirectiveAttribute Theme { + get { return theme; } + } +#if NET_4_0 + internal MainDirectiveAttribute MetaDescription { + get { return metaDescription; } + } + + internal MainDirectiveAttribute MetaKeywords { + get { return metaKeywords; } + } +#endif internal string Culture { get { return culture; } } @@ -521,10 +633,6 @@ namespace System.Web.UI get { return uiculture; } } - internal int LCID { - get { return lcid; } - } - internal string ErrorPage { get { return errorPage; } } @@ -533,15 +641,10 @@ namespace System.Web.UI get { return validateRequest; } } - internal string ClientTarget { - get { return clientTarget; } - } - internal bool NotBuffer { get { return notBuffer; } } -#if NET_2_0 internal bool Async { get { return async; } } @@ -549,25 +652,18 @@ namespace System.Web.UI internal int AsyncTimeout { get { return asyncTimeout; } } - - internal string Theme { - get { return theme; } - } internal string StyleSheetTheme { get { return styleSheetTheme; } } - - internal string MasterPageFile { - get { return masterPage; } - } internal Type MasterType { - get { return masterType; } - } - - internal string Title { - get { return title; } + get { + if (masterType == null && !String.IsNullOrEmpty (masterVirtualPath)) + masterType = BuildManager.GetCompiledType (masterVirtualPath); + + return masterType; + } } internal bool EnableEventValidation { @@ -582,14 +678,16 @@ namespace System.Web.UI get { return maxPageStateFieldLength; } } - internal string PageParserFilterType { - get { return pageParserFilter; } - } - internal Type PreviousPageType { - get { return previousPageType; } + get { + if (previousPageType == null && !String.IsNullOrEmpty (previousPageVirtualPath)) { + string mappedPath = MapPath (previousPageVirtualPath); + previousPageType = GetCompiledPageType (previousPageVirtualPath, mappedPath, HttpContext.Current); + } + + return previousPageType; + } } -#endif } }