zoukankan      html  css  js  c++  java
  • TagHelper+Layui封装组件之Radio单选框

    TagHelper+Layui封装组件之Radio单选框

    • 标签名称:cl-radio
    • 标签属性:
      • asp-for:绑定的字段,必须指定
      • asp-items:绑定单选项 类型为:IEnumerable<SelectListItem>
        太简单了,直接上代码了

    RadioTagHelper代码

    using System;
    using System.Collections.Generic;
    using Microsoft.AspNetCore.Mvc.Rendering;
    using Microsoft.AspNetCore.Mvc.ViewFeatures;
    using Microsoft.AspNetCore.Razor.TagHelpers;
    
    namespace LayuiTagHelper.TagHelpers
    {
        /// <summary>
        /// 单选框
        /// </summary>
        [HtmlTargetElement(RadioTagName)]
        public class RadioTagHelper : TagHelper
        {
            private const string RadioTagName = "cl-radio";
            private const string ForAttributeName = "asp-for";
            private const string ItemsAttributeName = "asp-items";
    
            [ViewContext]
            public ViewContext ViewContext { get; set; }
    
            [HtmlAttributeName(ForAttributeName)]
            public ModelExpression For { get; set; }
    
            [HtmlAttributeName(ItemsAttributeName)]
            public IEnumerable<SelectListItem> Items { get; set; }
    
            public override void Process(TagHelperContext context, TagHelperOutput output)
            {
                if (For == null)
                {
                    throw new ArgumentException("必须绑定模型");
                }
                foreach (var item in Items)
                {
                    var radio = new TagBuilder("input");
                    radio.TagRenderMode = TagRenderMode.SelfClosing;
                    radio.Attributes.Add("id", ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(For.Name));
                    radio.Attributes.Add("name", ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(For.Name));
                    radio.Attributes.Add("value", item.Value);
                    radio.Attributes.Add("title", item.Text);
                    radio.Attributes.Add("type", "radio");
                    if (item.Disabled)
                    {
                        radio.Attributes.Add("disabled", "disabled");
                    }
                    if (item.Selected || item.Value == For.Model?.ToString())
                    {
                        radio.Attributes.Add("checked", "checked");
                    }
                    output.Content.AppendHtml(radio);
                }
                output.TagName = "";
            }
        }
    }
    
    

    使用示例

    @{
    string sex="男";
    var Items=new List<SelectListItem>()
               {
                    new SelectListItem() { Text = "男", Value = "男" },
                    new SelectListItem() { Text = "女", Value = "女"},
                    new SelectListItem() { Text = "不详", Value = "不详",Disabled=true }
               };
    }
    <cl-radio asp-items="@Items" asp-for="sex"></cl-radio>
    
  • 相关阅读:
    Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt)
    算法七:广度优先搜索
    sqldependency 支持的select
    ghostDoct 使用 (转 http://www.cnblogs.com/RockyMyx/archive/2010/04/20/Project-Route-Using-GhostDoc.html)
    Jenkins 使用学习笔记
    C# 反射类型转换
    时间分割线:2016年1月的文章都是从以前chinaunix的博客文章
    Error 42 error C2784: 'bool std::operator <(const std::_Tree<_Traits>
    JNI的类路径问题
    【转】不用临时变量也可以交换变量的值
  • 原文地址:https://www.cnblogs.com/morang/p/7638890.html
Copyright © 2011-2022 走看看