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>
    
  • 相关阅读:
    java内部类
    重新回顾JSP
    vs 链接动态库 (不用放在可执行文件同一目录)
    c++ 文件夹读取文件
    为人处世
    Windows常用软件
    windows好用的软件
    冒泡排序,快速排序,归并排序
    最大公约数、最小公倍数、所有约数
    linux U盘 硬盘 unable to mount
  • 原文地址:https://www.cnblogs.com/morang/p/7638890.html
Copyright © 2011-2022 走看看