首页 > 代码库 > 基于 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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。