/// <summary> /// 基于Combres的ResourceName引入js/css /// </summary> /// <param name="resourceType"><see cref="PageResourceType"/></param> /// <param name="resouceSetName">Combres中设置的ResourceSet</param> /// <param name="debugResouceSetName">debug时使用的ResouceSetName</param> /// <param name="renderPriority">呈现优先级</param> /// <param name="renderLocation">在页面中的呈现位置</param> /// <param name="htmlAttributes">设置的html属性</param> public void IncludeCombresResouceSet(PageResourceType resourceType, string resouceSetName, string debugResouceSetName = null, ResourceRenderPriority renderPriority = ResourceRenderPriority.Unspecified, ResourceRenderLocation renderLocation = ResourceRenderLocation.Head, IDictionary <string, string> htmlAttributes = null) { if (string.IsNullOrEmpty(resouceSetName)) { throw new ArgumentNullException("resouceSetName"); } string url = WebExtensions.CombresUrl(resouceSetName); string debugUrl = null; if (debugResouceSetName != null) { debugUrl = WebExtensions.CombresUrl(debugResouceSetName); } ResourceEntry resource = new ResourceEntry(resourceType, null, url, debugUrl, renderPriority, renderLocation, htmlAttributes); switch (resourceType) { case PageResourceType.JS: _includedScripts.Add(resource); break; case PageResourceType.CSS: _includedCsss.Add(resource); break; } }
/// <summary> /// Renders a resource (Javascript, CSS, ...) /// </summary> /// <param name="HtmlHelper"></param> /// <param name="resourceType"></param> /// <returns></returns> public static HtmlString RenderResources(this IHtmlHelper HtmlHelper, PageResourceType resourceType) { if (HtmlHelper.ViewContext.HttpContext.Items[resourceType] != null) { var resources = (Dictionary <int, Func <object, HelperResult> >)HtmlHelper.ViewContext.HttpContext.Items[resourceType]; foreach (var resource in resources?.Values) { HtmlHelper.ViewContext.Writer.Write(resource(null)); } } return(new HtmlString(string.Empty)); }
/// <summary> /// 构造函数 /// </summary> /// <param name="resourceType">资源类型</param> /// <param name="basePath">基路径</param> /// <param name="url"></param> /// <param name="debugUrl"></param> /// <param name="renderPriority"></param> /// <param name="renderLocation"></param> /// <param name="attributes"></param> public ResourceEntry(PageResourceType resourceType, string basePath, string url, string debugUrl, ResourceRenderPriority renderPriority, ResourceRenderLocation renderLocation, IDictionary <string, string> attributes) { this.ResourceType = resourceType; this.BasePath = basePath; this.Url = url; this.DebugUrl = debugUrl; this.RenderPriority = renderPriority; this.RenderLocation = renderLocation; if (attributes != null) { this.Attributes = attributes; } }
/// <summary> /// Adds a resource (Javascript, CSS, ...) /// </summary> /// <param name="HtmlHelper"></param> /// <param name="resourceType"></param> /// <param name="Template"></param> /// <returns></returns> public static HtmlString AddResource(this IHtmlHelper HtmlHelper, PageResourceType resourceType, Func <object, HelperResult> Template) { if (!(HtmlHelper.ViewContext.HttpContext.Items[resourceType] is Dictionary <int, Func <object, HelperResult> > allItems)) { allItems = new Dictionary <int, Func <object, HelperResult> >(); HtmlHelper.ViewContext.HttpContext.Items[resourceType] = allItems; } int hash = -1; using (var writer = new StringWriter(CultureInfo.InvariantCulture)) { Template(null).WriteTo(writer, HtmlEncoder.Default); hash = writer.ToString().GetHashCode(); } if (!allItems.ContainsKey(hash)) { allItems.Add(hash, Template); } return(new HtmlString(string.Empty)); }
public static IList <T> Resources <T>(this Page page, PageResourceType type) where T : PageResource { return(page.Resources.Where(x => x.ResourceType == type).OrderBy(x => x.Ordinal).Cast <T>().ToList()); }
/// <summary> /// 基于Combres的ResourceName引入js/css /// </summary> /// <param name="resourceType"><see cref="PageResourceType"/></param> /// <param name="resouceSetName">Combres中设置的ResourceSet</param> public void IncludeCombresResouceSet(PageResourceType resourceType, string resouceSetName) { IncludeCombresResouceSet(resourceType, resouceSetName, null); }
/// <summary> /// 在页面引用Combres Script /// </summary> /// <param name="html"></param> /// <param name="resourceType"><see cref="PageResourceType"/></param> /// <param name="resourceSetName">在Combres设置的ResourceSet名称</param> /// <param name="renderPriority">资源呈现优先级<see cref="ResourceRenderPriority"/></param> public static void IncludeCombresScript(this HtmlHelper html, PageResourceType resourceType, string resourceSetName, ResourceRenderPriority renderPriority = ResourceRenderPriority.Unspecified) { IPageResourceManager pageResourceManager = DIContainer.ResolvePerHttpRequest <IPageResourceManager>(); pageResourceManager.IncludeCombresResouceSet(resourceType, resourceSetName, renderPriority: renderPriority); }