// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information. using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.IO; using System.Security.Principal; using System.Web.Caching; using System.Web.WebPages.Html; using System.Web.WebPages.Instrumentation; namespace System.Web.WebPages { [SuppressMessage("Microsoft.Design", "CA1053:StaticHolderTypesShouldNotHaveConstructors", Justification = "Even though this is essentially a static class, we need helper classes to inherit from it to get their static methods")] public class HelperPage { private static WebPageContext _pageContext; private static InstrumentationService _instrumentationService = null; private static InstrumentationService InstrumentationService { get { if (_instrumentationService == null) { _instrumentationService = new InstrumentationService(); } return _instrumentationService; } } public static HttpContextBase Context { get { return new HttpContextWrapper(HttpContext.Current); } } public static WebPageRenderingBase CurrentPage { get { return PageContext.Page; } } public static dynamic Page { get { return CurrentPage.Page; } } public static dynamic Model { get { WebPage currentWebPage = CurrentPage as WebPage; if (currentWebPage == null) { return null; } return currentWebPage.Model; } } public static ModelStateDictionary ModelState { get { WebPage currentWebPage = CurrentPage as WebPage; if (currentWebPage == null) { return null; } return currentWebPage.ModelState; } } public static HtmlHelper Html { get { WebPage currentWebPage = CurrentPage as WebPage; if (currentWebPage == null) { return null; } return currentWebPage.Html; } } public static WebPageContext PageContext { get { return _pageContext ?? WebPageContext.Current; } set { _pageContext = value; } } public static HttpApplicationStateBase AppState { get { if (Context != null) { return Context.Application; } return null; } } public static dynamic App { get { return CurrentPage.App; } } public static string VirtualPath { get { return PageContext.Page.VirtualPath; } } public static Cache Cache { get { if (Context != null) { return Context.Cache; } return null; } } public static HttpRequestBase Request { get { if (Context != null) { return Context.Request; } return null; } } public static HttpResponseBase Response { get { if (Context != null) { return Context.Response; } return null; } } public static HttpServerUtilityBase Server { get { if (Context != null) { return Context.Server; } return null; } } public static HttpSessionStateBase Session { get { if (Context != null) { return Context.Session; } return null; } } public static IList UrlData { get { return CurrentPage.UrlData; } } public static IPrincipal User { get { return CurrentPage.User; } } public static bool IsPost { get { return CurrentPage.IsPost; } } public static bool IsAjax { get { return CurrentPage.IsAjax; } } public static IDictionary PageData { get { return PageContext.PageData; } } protected static string HelperVirtualPath { get; set; } public static string Href(string path, params object[] pathParts) { return CurrentPage.Href(path, pathParts); } public static void WriteTo(TextWriter writer, object value) { WebPageBase.WriteTo(writer, value); } public static void WriteLiteralTo(TextWriter writer, object value) { WebPageBase.WriteLiteralTo(writer, value); } public static void WriteTo(TextWriter writer, HelperResult value) { WebPageBase.WriteTo(writer, value); } public static void WriteLiteralTo(TextWriter writer, HelperResult value) { WebPageBase.WriteLiteralTo(writer, value); } public static void WriteAttributeTo(TextWriter writer, string name, PositionTagged prefix, PositionTagged suffix, params AttributeValue[] values) { CurrentPage.WriteAttributeTo(VirtualPath, writer, name, prefix, suffix, values); } public static void BeginContext(string virtualPath, int startPosition, int length, bool isLiteral) { BeginContext(PageContext.Page.GetOutputWriter(), virtualPath, startPosition, length, isLiteral); } public static void BeginContext(TextWriter writer, string virtualPath, int startPosition, int length, bool isLiteral) { // Double check that the instrumentation service is active because WriteAttribute always calls this if (InstrumentationService.IsAvailable) { InstrumentationService.BeginContext(Context, virtualPath, writer, startPosition, length, isLiteral); } } public static void EndContext(string virtualPath, int startPosition, int length, bool isLiteral) { EndContext(PageContext.Page.GetOutputWriter(), virtualPath, startPosition, length, isLiteral); } public static void EndContext(TextWriter writer, string virtualPath, int startPosition, int length, bool isLiteral) { // Double check that the instrumentation service is active because WriteAttribute always calls this if (InstrumentationService.IsAvailable) { InstrumentationService.EndContext(Context, virtualPath, writer, startPosition, length, isLiteral); } } } }