首页 > 代码库 > 基于 HtmlHelper 自定义扩展Container

基于 HtmlHelper 自定义扩展Container

基于 HtmlHelper 自定义扩展Container

Intro

基于 asp.net mvc 的权限控制系统的一部分,适用于对UI层数据呈现的控制,基于 HtmlHelper 的扩展组件

Code

基于 asp.net mvc 的权限控制系统示例代码:https://github.com/WeihanLi/AccessControlDemo

权限控制核心代码:https://github.com/WeihanLi/AccessControlDemo/tree/master/AccessControlHelper

SparkContainer 代码:

 1 public class SparkContainer : IDisposable 2     { 3         private readonly string _tagName; 4         private readonly ViewContext _viewContext; 5         private readonly bool _canAccess; 6         private bool _disposed; 7  8         private readonly string _content; 9 10         public SparkContainer(ViewContext viewContext, string tagName, bool canAccess = true)11         {12             _viewContext = viewContext;13             _tagName = tagName;14             _canAccess = canAccess;15             if (!_canAccess)16             {17                 _content = (_viewContext.Writer as StringWriter).GetStringBuilder().ToString();18             }19         }20 21         public void Dispose()22         {23             Dispose(true);24             GC.SuppressFinalize(this);25         }26 27         protected virtual void Dispose(bool disposing)28         {29             if (!_disposed)30             {31                 _disposed = true;32                 EndShopContainer();33             }34         }35 36         public void EndShopContainer()37         {38             if (!_canAccess)39             {40                 (_viewContext.Writer as StringWriter).GetStringBuilder().Clear().Append(_content);41             }42             else43             {44                 _viewContext.Writer.Write("</{0}>", _tagName);45             }46         }47     }

 

扩展方法

 /// <summary>        /// SparkContainer        /// </summary>        /// <param name="helper">HtmlHelper</param>        /// <param name="tagName">标签名称</param>        /// <param name="attributes">htmlAttributes</param>        /// <param name="accessKey">accessKey</param>        /// <returns></returns>        public static SparkContainer SparkContainer(this HtmlHelper helper, string tagName, object attributes = null, string accessKey = "")        {            // ...            return SparkContainerHelper(helper, tagName, HtmlHelper.AnonymousObjectToHtmlAttributes(attributes), displayStrategy.IsControlCanAccess(accessKey));        }        private static SparkContainer SparkContainerHelper(this HtmlHelper helper, string tagName,            IDictionary<string, object> attributes = null, bool canAccess = true)        {            // ...            TagBuilder tagBuilder = new TagBuilder(tagName);            if (canAccess)            {                tagBuilder.MergeAttributes(attributes);                helper.ViewContext.Writer.Write(tagBuilder.ToString(TagRenderMode.StartTag));            }            return new SparkContainer(helper.ViewContext, tagName, canAccess);        }

 

Use

使用说明:

@using(Html.SparkContainer("div",new { @class="container",custom-attribute = "abcd" })){    @Html.Raw("1234")}

 

没有权限访问时就不会将内容渲染到页面,有权限访问时实际渲染生成的 Html 如下:

1 <div class="container" custom-attribute="abcd">2     12343 </div>

 

Contact

如果您有什么问题或建议,欢迎与我联系 weihanli@outlook.com

基于 HtmlHelper 自定义扩展Container