加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

基于 HtmlHelper 的自定义扩展Container

发布时间:2020-12-16 09:01:27 所属栏目:asp.Net 来源:网络整理
导读:基于 HtmlHelper 的自定义扩展Container Intro 基于 asp.net mvc 的权限控制系统的一部分,适用于对UI层数据呈现的控制,基于 HtmlHelper 的扩展组件 Code 基于 asp.net mvc 的权限控制系统示例代码:https://github.com/WeihanLi/AccessControlDemo 权限控

基于 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         readonly ViewContext _viewContext;
 5         bool _canAccess;
 6          _disposed;
 7 
 8          _content;
 9 
10         public SparkContainer(ViewContext viewContext,string tagName,1)">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         void Dispose()
22 23             Dispose();
24             GC.SuppressFinalize(this25 26 
27         protected virtual void Dispose( disposing)
28 29             _disposed)
30 31                 _disposed = ;
32                 EndShopContainer();
33 34 35 
36          EndShopContainer()
37 38             39 40                 (_viewContext.Writer  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 name="attributes">htmlAttributes<param name="accessKey">accessKey<returns></returns>
        static SparkContainer SparkContainer(this HtmlHelper helper,1)">object attributes = null,1)">string accessKey = "")
        {
            // ...
            return SparkContainerHelper(helper,tagName,HtmlHelper.AnonymousObjectToHtmlAttributes(attributes),displayStrategy.IsControlCanAccess(accessKey));
        }

        static SparkContainer SparkContainerHelper( tagName,IDictionary<string,1)">object> attributes =  ...
            TagBuilder tagBuilder = new TagBuilder(tagName);
            if (canAccess)
            {
                tagBuilder.MergeAttributes(attributes);
                helper.ViewContext.Writer.Write(tagBuilder.ToString(TagRenderMode.StartTag));
            }
            return  SparkContainer(helper.ViewContext,canAccess);
        }

?

Use

使用说明:

@using(Html.SparkContainer(div",1)">new { @class=containerabcd }))
{
    @Html.Raw(1234)
}

?

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

1 <div ="container" custom-attribute="abcd">
2     1234
3 </div>

?

Contact

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读