摘要

在使用checkbox,为其绑定值的时候,有些麻烦,就想着能不能用taghelper将其封装一下。直接上demo。

一个例子

  1. using Microsoft.AspNetCore.Mvc.Rendering;
  2. using Microsoft.AspNetCore.Razor.TagHelpers;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8.  
  9. namespace LayUI.TagHelpersDemo.TagHelpers
  10. {
  11. public class CheckBoxTagHelper : TagHelper
  12. {
  13. public List<CheckBoxItem> Items { set; get; } = new List<CheckBoxItem>();
  14. public string Name { set; get; } = Guid.NewGuid().ToString();
  15. public override void Process(TagHelperContext context, TagHelperOutput output)
  16. {
  17. output.TagName = "checkbox";
  18. if (Items != null && Items.Count > )
  19. {
  20. for (int i = ; i < Items.Count; i++)
  21. {
  22. var checkbox = new TagBuilder("input");
  23. checkbox.TagRenderMode = TagRenderMode.SelfClosing;
  24. var item = Items[i];
  25. checkbox.Attributes.Add("id", item.Id);
  26. checkbox.Attributes.Add("name", Name);
  27. if (item.Checked)
  28. {
  29. checkbox.Attributes.Add("checked", "checked");
  30. }
  31. if (item.Disabled)
  32. {
  33. checkbox.Attributes.Add("disabled", "disabled");
  34. }
  35. checkbox.Attributes.Add("type", "checkbox");
  36. checkbox.Attributes.Add("value", item.Value);
  37. checkbox.Attributes.Add("title", item.Text);
  38.  
  39. output.Content.AppendHtml(checkbox);
  40. }
  41. }
  42. base.Process(context, output);
  43. }
  44. }
  45. }

CheckBoxItem

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5.  
  6. namespace LayUI.TagHelpersDemo.TagHelpers
  7. {
  8. /// <summary>
  9. /// 复选框项
  10. /// </summary>
  11. public class CheckBoxItem
  12. {
  13. /// <summary>
  14. /// 复选框id
  15. /// </summary>
  16. public string Id { set; get; } = Guid.NewGuid().ToString();
  17. /// <summary>
  18. /// 复选框值
  19. /// </summary>
  20. public string Value { set; get; }
  21. /// <summary>
  22. /// 复选框文本内容
  23. /// </summary>
  24. public string Text { set; get; }
  25. /// <summary>
  26. /// 是否选中
  27. /// </summary>
  28. public bool Checked { set; get; }
  29. /// <summary>
  30. /// 是否可用
  31. /// </summary>
  32. public bool Disabled { set; get; }
  33. }
  34. }

在_ViewImports.cshtml引入自定义taghelper

  1. @using LayUI.TagHelpersDemo
  2. @using LayUI.TagHelpersDemo.Models
  3. @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
  4. @tagHelperPrefix wf:
  5. @addTagHelper LayUI.TagHelpersDemo.*,LayUI.TagHelpersDemo

使用

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6. using Microsoft.AspNetCore.Mvc;
  7. using LayUI.TagHelpersDemo.Models;
  8. using LayUI.TagHelpersDemo.TagHelpers;
  9.  
  10. namespace LayUI.TagHelpersDemo.Controllers
  11. {
  12. public class HomeController : Controller
  13. {
  14. public IActionResult Index()
  15. {
  16. return View();
  17. }
  18.  
  19. public IActionResult About()
  20. {
  21. ViewData["Message"] = "Your application description page.";
  22.  
  23. return View();
  24. }
  25.  
  26. public IActionResult Contact()
  27. {
  28. ViewData["Message"] = "Your contact page.";
  29.  
  30. return View();
  31. }
  32. public IActionResult Test()
  33. {
  34. List<CheckBoxItem> items = new List<CheckBoxItem> {
  35. new CheckBoxItem{ Id=Guid.NewGuid().ToString(), Value =Guid.NewGuid().ToString(), Text="篮球" },
  36. new CheckBoxItem{ Id=Guid.NewGuid().ToString(), Value=Guid.NewGuid().ToString(), Text="足球" },
  37. new CheckBoxItem{ Id=Guid.NewGuid().ToString(), Value=Guid.NewGuid().ToString(), Text="美女" }
  38. };
  39. return View(items);
  40. }
  41. public string Post()
  42. {
  43. return Request.Form["interest"];
  44. }
  45. public IActionResult Error()
  46. {
  47. return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
  48. }
  49. }
  50. }
  1. @{
  2. Layout = null;
  3. }
  4.  
  5. <!DOCTYPE html>
  6. @model List<LayUI.TagHelpersDemo.TagHelpers.CheckBoxItem>
  7. <html>
  8. <head>
  9. <meta name="viewport" content="width=device-width" />
  10. <title>Test</title>
  11. <link href="@Url.Content("~/layui/css/layui.css")" rel="stylesheet" />
  12. </head>
  13. <body>
  14.  
  15. <form class="layui-form"action="../home/post" method="post">
  16. <div class="layui-form-item">
  17. <label class="layui-form-label">复选框</label>
  18. <div class="layui-input-block">
  19. <wf:check-box items="Model" name="interest"></wf:check-box>
  20. </div>
  21. </div>
  22. <input type="submit" name="name" class="layui-btn layui-btn-lg" value="提交" />
  23. </form>
  24. <script src="@Url.Content("~/layui/layui.js")"></script>
  25. <!-- 注意:如果你直接复制所有代码到本地,上述js路径需要改成你本地的 -->
  26. <script>
  27. layui.use(['form', 'layedit', 'laydate'], function () {
  28. var form = layui.form
  29. , layer = layui.layer
  30. , layedit = layui.layedit
  31. , laydate = layui.laydate;
  32.  
  33. //日期
  34. laydate.render({
  35. elem: '#date'
  36. });
  37. laydate.render({
  38. elem: '#date1'
  39. });
  40.  
  41. //创建一个编辑器
  42. var editIndex = layedit.build('LAY_demo_editor');
  43.  
  44. //自定义验证规则
  45. form.verify({
  46. title: function (value) {
  47. if (value.length < ) {
  48. return '标题至少得5个字符啊';
  49. }
  50. }
  51. , pass: [/(.+){,}$/, '密码必须6到12位']
  52. , content: function (value) {
  53. layedit.sync(editIndex);
  54. }
  55. });
  56.  
  57. //监听指定开关
  58. form.on('switch(switchTest)', function (data) {
  59. layer.msg('开关checked:' + (this.checked ? 'true' : 'false'), {
  60. offset: '6px'
  61. });
  62. layer.tips('温馨提示:请注意开关状态的文字可以随意定义,而不仅仅是ON|OFF', data.othis)
  63. });
  64.  
  65. //监听提交
  66. form.on('submit(demo1)', function (data) {
  67. layer.alert(JSON.stringify(data.field), {
  68. title: '最终的提交信息'
  69. })
  70. return false;
  71. });
  72.  
  73. });
  74. </script>
  75.  
  76. </body>
  77. </html>

测试

提交之后,获取每项ID

f7be9e8d-31a2-4206-a3c3-fc5e391c1629,607849ae-d1fa-4007-9e0d-9faaf10c8f1f

总结

一些常用的控件,可以通过taghelper对其进行封装一下,使用起来更方便。

[Asp.net core]封装Layer ui checkbox 为taghelper的更多相关文章

  1. asp.net core 集成swagger ui

    什么是Swagger? 说swagger 之前,我们先说一下OpenApi 规范. OpenApi 是一种和语言无关的用于描述RESTAPIs 接口功能的一种规范,对RESTAPIs 接口的描述包括: ...

  2. ASP.NET Core 3.0 : 二十五. TagHelper

    什么是TagHelper?这是ASP.NET Core 中新出现的一个名词,它的作用是使服务器端代码可以在Razor 文件中参与创建和呈现HTML 元素.(ASP.NET Core 系列目录) 一.概 ...

  3. asp.net core封装layui组件示例分享

    用什么封装?自然是TagHelper啊,是啥?自己瞅文档去 在学习使用TagHelper的时候,最希望的就是能有个Demo能够让自己作为参考 怎么去封装一个组件? 不同的情况怎么去实现? 有没有更好更 ...

  4. ASP.NET Core 在 Swagger UI 中显示自定义的 Header Token

    Swagger 是个好东西,对于前后端分离的网站来说,不仅是提高前后端开发人员沟通效率的利器,也大大方便了后端人员测试 API.有时候,API 中可能需要在 Header 中设置认证参数,比如 aut ...

  5. ASP.NET Core 运行原理剖析

    1. ASP.NET Core 运行原理剖析 1.1. 概述 1.2. 文件配置 1.2.1. Starup文件配置 Configure ConfigureServices 1.2.2. appset ...

  6. ASP.NET Core 运行原理剖析 (转载)

    1.1. 概述 在ASP.NET Core之前,ASP.NET Framework应用程序由IIS加载.Web应用程序的入口点由InetMgr.exe创建并调用托管.以初始化过程中触发HttpAppl ...

  7. ASP.NET Core缓存静态资源

    背景 缓存样式表,JavaScript或图像文件等静态资源可以提高您网站的性能.在客户端,总是从缓存中加载一个静态文件,这样可以减少对服务器的请求数量,从而减少获取页面及其资源的时间.在服务器端,由于 ...

  8. Asp.Net Core 2.0 项目实战(6)Redis配置、封装帮助类RedisHelper及使用实例

    本文目录 1. 摘要 2. Redis配置 3. RedisHelper 4.使用实例 5. 总结 1.  摘要 由于內存存取速度远高于磁盘读取的特性,为了程序效率提高性能,通常会把常用的不常变动的数 ...

  9. Asp.Net Core 2.0 项目实战(4)ADO.NET操作数据库封装、 EF Core操作及实例

    Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...

随机推荐

  1. Servlet笔记9--转发与重定向

    关于Web中资源跳转的问题: 转发和重定向基本代码: package com.bjpowernode.javaweb; import java.io.IOException; import javax ...

  2. python3之Splash

    Splash是一个javascript渲染服务.它是一个带有HTTP API的轻量级Web浏览器,使用Twisted和QT5在Python 3中实现.QT反应器用于使服务完全异步,允许通过QT主循环利 ...

  3. Wiggle Sort I & II

    Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= nums[2] < ...

  4. Linux中断(interrupt)子系统之四:驱动程序接口层 & 中断通用逻辑层【转】

    转自:http://blog.csdn.net/droidphone/article/details/7497787 在本系列文章的第一篇:Linux中断(interrupt)子系统之一:中断系统基本 ...

  5. centos7系统下安装配置jdk、tomcat教程

    JDK安装与配置 1.下载linux版本的jdk,我下的版本是jdk6.0,下载rpm版本的. 可通过百度搜索文件名:jdk-6u45-linux-x64-rpm.bin下载 也可通过oracle官网 ...

  6. Coursera台大机器学习技法课程笔记11-Gradient Boosted Decision Tree

    将Adaboost和decision tree相结合,需要注意的地主是,训练时adaboost需要改变资料的权重,如何将有权重的资 料和decision tree相结合呢?方法很类似于前面讲过的bag ...

  7. eclipse开发mapreduce程序时出现的问题

    1.报HDFS权限不够:org.apache.hadoop.security.AccessControlException: Permission denied:user=ouqiping, acce ...

  8. LeetCode(23):合并K个排序链表

    Hard! 题目描述: 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [   1->4->5,   1->3->4,   2-> ...

  9. (五)消费Dubbo服务

    前面我们搞了发布Dubbo服务,发布的服务就是用来消费的,所以我们这里来调用服务,消费下: 创建maven项目 dubbo-demo-consumer pom.xml配置下: <dependen ...

  10. 重装Ubuntu时如何保留/home分区中的数据

    重装Ubuntu时如何保留/home分区中的数据作者:maowang Windows系统可以在重装时只格式化C盘,从而保留其他分区的数据. Ubuntu系统也可以,只要在安装系统时分出一个/home分 ...