MVC Core 使用TagHelper扩展几个插件

未完待续...

案例1:按钮权限校验,无权限不显示,利用TagHelper控制元素是否输出

    [HtmlTargetElement("tc-permission", TagStructure = TagStructure.NormalOrSelfClosing)]
    public class TCPermissionTagHelper : TagHelper
    {
        private IPermissionContext permissionContext = null;
        public TCPermissionTagHelper(IPermissionContext permissionContext)
        {
            this.permissionContext = permissionContext;
        }

        public string[] Permissions { get; set; }
        public string Permission { get; set; }

        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            if (output == null)
            {
                throw new ArgumentNullException(nameof(output));
            }
            output.TagName = null;
            if (!string.IsNullOrEmpty(Permission))
            {
                Permissions = Permission.SplitToArray<string>();
            }
            //HasPermission:根据UserID、按钮权限编码判断用户是否有此按钮权限,如果无权就不输出
            if (Permissions == null || Permissions.Length == 0 || !permissionContext.HasPermission(Permissions))
            {
                output.SuppressOutput();
                return;
            }

        }
    }

页面中添加:

<tc-permission permission="@Permissions.系统模块.账户管理.添加">
            <a id="btnAdd" class="btn  btn-primary" onclick="cache.add(); return false;">添加</a>
        </tc-permission>

 lable-input插件:

 1     [HtmlTargetElement("label-input")]
 2     public class FieldTagHelper : TagHelper
 3     {
 4         public string FieldName { get; set; }
 5         public string Label { get; set; }
 6         public string Value { get; set; }
 7         public string PlaceHolder { get; set; }
 8         public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
 9         {
10             output.TagName = "div";
11             output.Attributes.Add("class", "form-group");
12             output.Content.SetHtmlContent(
13                 $@"<label for='{FieldName}'>{Label}</label>
14                    <input type='text' id='{FieldName}' name='{FieldName}' value='{Value}'>");
15 
16 
17             return base.ProcessAsync(context, output);
18         }
19     }

Enum版Select:

 1     /// <summary>
 2     /// Enum版Select
 3     /// </summary>
 4     [HtmlTargetElement("select-enum")]
 5     public class SelectEnumTagHelper : TagHelper
 6     {
 7         public Type EnumType { get; set; }
 8         public object Value { get; set; }
 9         public string Placeholder { get; set; }
10         //public Dictionary<string, object> Attributes { get; set; }
11         public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
12         {
13             output.TagName = "select";
14             StringBuilder buffer = new StringBuilder();
15             if (!string.IsNullOrWhiteSpace(this.Placeholder))
16             {
17                 buffer.Append($"<option value='0'>{this.Placeholder}</option>");
18             }
19             string selected = string.Empty;
20             if (EnumType != null && EnumType.IsEnum)
21             {
22                 var enumFields = Enum.GetValues(EnumType);
23                 foreach (var enumField in enumFields)
24                 {
25                     selected = (int)Value == (int)enumField ? "selected='selected'" : "";
26                     buffer.Append($"<option value='{(int)enumField}' {selected}>{enumField.ToString()}</option>");
27                 }
28             }
29             output.Content.SetHtmlContent(buffer.ToString());
30 
31             return base.ProcessAsync(context, output);
32         }
33     }

Source版select:

 1     /// <summary>
 2     /// Source版Select
 3     /// </summary>
 4     [HtmlTargetElement("select-source")]
 5     public class SelectSourceTagHelper : TagHelper
 6     {
 7         public string ValueFieldName { get; set; }
 8         public string TextFieldName { get; set; }
 9 
10         public IEnumerable<object> Source { get; set; }
11         public object Value { get; set; }
12         public string Placeholder { get; set; }
13         //public Dictionary<string, object> Attributes { get; set; }
14         public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
15         {
16             output.TagName = "select";
17             StringBuilder buffer = new StringBuilder();
18             if (!string.IsNullOrWhiteSpace(this.Placeholder))
19             {
20                 buffer.Append($"<option value='0'>{this.Placeholder}</option>");
21             }
22             string selected = string.Empty;
23             if (this.Source != null && this.Source.Count() > 0)
24             {
25                 Type sourceType = Source.FirstOrDefault().GetType();
26                 var tProperty = sourceType.GetProperty(this.TextFieldName, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.IgnoreCase);
27                 var vProperty = sourceType.GetProperty(this.ValueFieldName, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.IgnoreCase);
28                 if (tProperty != null && vProperty != null)
29                 {
30                     object text = null;
31                     object value = null;
32                     foreach (var item in Source)
33                     {
34                         text = tProperty.GetValue(item, null);
35                         value = vProperty.GetValue(item, null);
36 
37                         selected = (int)this.Value == (int)value ? "selected='selected'" : "";
38                         buffer.Append($"<option value='{(int)value}' {selected}>{text}</option>");
39                     }
40                     output.Content.SetHtmlContent(buffer.ToString());
41                 }
42             }
43 
44             return base.ProcessAsync(context, output);
45         }
46     }
 1 @using MVCCoreDemo
 2 @addTagHelper *,MVCCoreDemo
 3 @{
 4     List<Person> personList = new List<Person> {
 5     new Person{ ID=1,Name="zhao"},
 6     new Person{ ID=2,Name="qian"},
 7     new Person{ ID=3,Name="sun"},
 8     new Person{ ID=4,Name="li"}
 9     };
10 
11 }
12 
13 <label-input field-name="UserName" label="用户名:" placeholder="请输入用户名" value="zhangsan"></label-input>
14 <select-enum id="select1" name="select1" class="c1" enum-type="@typeof(ECustomerLevel)" Value="3" placeholder="请选择"></select-enum>
15 <select-source id="select2" name="select2" class="c1" source="@personList" Value="3" value-field-name="ID" text-field-name="Name" placeholder="请选择"></select-source>
原文地址:https://www.cnblogs.com/fanfan-90/p/11939962.html