.Net Core 表单组件封装-TagHelper

在表单中会有大量的HTML元素会重复,包括样式,数据绑定等等,通过TagHelper来进行自定义的封装
 
这里以LayUI的日期控件举例,
 
官网的日期控件使用:
1. <div class="layui-inline"> <!-- 注意:这一层元素并不是必须的 -->
2. <input type="text" class="layui-input" id="test1">
3. </div>
4. <script src="/static/build/layui.js"></script>
5. <script>
6. layui.use('laydate', function(){
7. var laydate = layui.laydate;
8. //执行一个laydate实例
9. laydate.render({
10. elem: '#test1' //指定元素
11. });
12. });
13. </script>
封装后的代码量
<form:DateTime name="CreateTime" is-now="true"></form:DateTime>
 
步骤如下:
1.创建DateTimeTagHelper类
    
 1 [HtmlTargetElement("form:DateTime")]
 2     /// <summary>
 3     /// 日期控件
 4     /// </summary>
 5     public class DateTimeTagHelper : TagHelper
 6     {
 7         /// <summary>
 8         /// 控件Name
 9         /// </summary>
10         public string Name { get; set; }
11         /// <summary>
12         /// 是否显示当前时间
13         /// </summary>
14         public bool IsNow { get; set; }
15         public override void Process(TagHelperContext context, TagHelperOutput output)
16         {
17             output.TagName = "input";
18             output.Attributes.Add("type", "text");
19             output.Attributes.Add("class", "layui-input");
20             output.Attributes.Add("id", Name);
21             output.Attributes.Add("name", Name);
22             output.Attributes.Add("placeholder", "yyyy-MM-dd");
23             if (IsNow)
24             {
25                 output.Attributes.Add("value", DateTime.Now.ToString("yyyy-MM-dd"));
26             }
27             output.TagMode = TagMode.StartTagAndEndTag;
28             output.PostElement.SetHtmlContent($@"
29        
30            <script>
31             layui.use('laydate', function(){{
32                   var laydate = layui.laydate;
33   
34                   //执行一个laydate实例
35                   laydate.render({{
36                     elem: '#{Name}' //指定元素
37                 ,change:function(value){{
38                       $('#{Name}').val(value);   
39                 }}
40                   }});
41                 }});
42             </script>");
43         }
44     }

HtmlTargetElement:标签的名称

Attributes:定义用于选择匹配应用元素的属性

PostElement.SetHtmlContent:增加需要的HTML元素
 
2.在_ViewImports.cshtml注册DateTimeTagHelper
@using NetCoreFrame.WebUI
@using NetCoreFrame.WebUI.Models
@addTagHelper "NetCoreFrame.WebUI.TagHelpers.DateTimeTagHelper,NetCoreFrame.WebUI"
 
3.使用 注册成功后,标签的字体会变粗
1 <div class="layui-inline">
2         <label class="layui-form-label">发布日期</label>
3         <div class="layui-input-block">
4             <form:DateTime name="CreateTime" is-now="true"></form:DateTime>
5         </div>
6     </div>

 

 
posted @ 2020-02-19 22:04  y_w_k  阅读(473)  评论(0编辑  收藏  举报