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>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏互联网开发者交流社区

STC-单片机控制系统

1543
来自专栏码字搬砖

httpClient 发送压缩文件

2513
来自专栏c#开发者

让web api 4.5支持Jquery.getJson(url,handle)跨域访问

代码片段,google了半天,找到的都是4.5 rc,或之前版本的代码,发现都不能用,正式版后有些方法做了修改。我重新修改一下分享给大家 public stat...

2755
来自专栏张善友的专栏

发布一个日期选择控件(ASPNET2.0)

The Coolest DHTML Calendar,这是一个在GPL下发布的JS日历程序,具有极高的可配置性,包括外观样式、显示格式、显示内容等等。默认程序...

2559
来自专栏跟着阿笨一起玩NET

linq to sql 扩展方法

620
来自专栏owent

C#格式化输出(记录)

1082
来自专栏菩提树下的杨过

几种常见复合sql查询语句的linq写法[继续补充中]

1.IN 语句 尝试了很多次,好象linq死活不生成in语句,无奈只能做了下变换 例,要找出"手机大类"以及"手机下属所有子类"的产品 (手机大类的ID为D0...

2326
来自专栏hbbliyong

.Net下SQLite的DBHelp

怎样获取SqLite请参考初识SqlLite ---.net连接数据库,怎样在SQLite使用Linq请参考在C#中利用Nuget包使用SQLite数据库和Li...

3014
来自专栏跟着阿笨一起玩NET

c#委托把方法当成参数

2181
来自专栏木宛城主

曾经的代码系列——AJAX和JSON生成下拉列表框

代码测试使用 前台页面 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GetGradeC...

1877

扫码关注云+社区