基于 HtmlHelper 的自定义扩展Container
2018-06-22 06:13:41来源:未知 阅读 ()
基于 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 else 43 { 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 1234 3 </div>
Contact
如果您有什么问题或建议,欢迎与我联系 weihanli@outlook.com
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 详解WPF自定义搜索框代码 2019-11-15
- 分享基于EF6、Unitwork、Autofac的Repository模式设计 2019-07-23
- 基于asp.net(C#)MVC+前端bootstrap+ztree+lodash+jquery技术 2019-07-23
- 搭建基于.NetFrameWork的私有nuget服务端及打包项目发布上传 2019-07-10
- 基于ASP.NET的Web动态控件创建 2019-06-16
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash