.NET MVC标签扩展(checkbox,radio)

.NET MVC的自动绑定功能在表单处理中非常方便,但@Html.CheckBox和@Html.RadioButton对于多个选项的绑定不够灵活。为解决这个问题,可以使用扩展方法来创建能够绑定集合的checkbox和radio。本文介绍了如何创建这些扩展方法,包括生成checkbox和radio集合以及单个元素,并给出了控制器和视图的示例代码,以帮助开发者更便捷地实现多选和单选功能。
摘要由CSDN通过智能技术生成

      .NET  MVC里面自动绑定form表单功能(如:@Html.TextBox("Name")、@Html.Hidden("hide"),名称会自动与后台就行绑定ViewBag.Name,ViewBag,hide)很实用,但是感觉不足的就是@Html.CheckBox("check")和@Html.RadioButton("radio","1"),这两个表单只能单个进行绑定,当出现多个绑定进行选中时,用起来就相对不太方便,如下图



       想要通过集合直接绑定生成需要的多个checkbox和radiobutton,并且部分处于选中状态,还好.NET的扩展方法为我们提供了方便。扩展方法就不用多说了,就是在静态类中,建立静态方法,并且第一个参数是 (this [要扩展的对象] name),

     比如,你要给string类型扩展一个方法,要求当string长度超过10的时候只要截取前十个字符,当长度少于10的时候返回原字符串你可以这样:

namespace System
{
    public static class StringExtension
    {
       public static string SubTen(this string sourceStr) { 
            if(!string.IsNullOrEmpty(sourceStr)&&sourceStr.Length>10){
                return sourceStr.Substring(0,10);
            }
            return sourceStr;
        }
    }
}</span>
   调用的时候如下所示:
 string SS = "AASSSSSSSSSSSSSS";
  var SSS = SS.SubTen();

      这样当字符串长度大于10 的时候就会取出前十个字符。

      好了,扩展方法就说到这里,现在进入正题,对HtmlHelper要扩展四个方法,分别是生成checkbox集合,checkbox单个,radio集合和radio单个。

       方法如下,因为checkbox和radio只是type类型不同,因此,他们可以用同样的方法,只是传值的时候把类型传入进行判断就可以了。

private static IDictionary<string, object> CopyAll(this IDictionary<string, object> dicSor)
        {
            Dictionary<string, object> dicDst = new Dictionary<string, object>();
            foreach (var item in dicSor)
            {
                dicDst.Add(item.Key, item.Value);
            }
            return dicDst;
        }
这里的dictionary的扩展是方便循环的时候使用。
        /// <summary>
        /// 扩展checkbox和radio
        /// </summary>
        /// <param name="targtname">后台的取值</param>
        /// <param name="itype">标签类型</param>
        /// <param name="name">标签值name或者取后台值用到</param>
        /// <param name="selectList">传入的集合</param>
        /// <param name="htmlAttributes">Html标签属性</param>
        /// <returns></returns>
        private static MvcHtmlString RadioOrCheckBox(object targtname, string itype, string name, IEnumerable<SelectListItem> selectList, object htmlAttributes)
        {
            //不存在绑定值则返回空
            if (string.IsNullOrEmpty(name) || (targtname == null && selectList == null))
            {
                return MvcHtmlString.Create("");
            }
            //if (htmlHelper.ViewData.ContainsKey(name)) {
            //    name = htmlHelper.ViewData[name].ToString();
            //}
            string selectValues = "";
            Object selectedValues = null;
            HashSet<string> ckSet = new HashSet<string>();//用于存储选定值,不添加重复项
          
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值