zoukankan      html  css  js  c++  java
  • 为MVC3扩展CheckBoxList和RadioButtonList

    在WebForm时代,CheckBoxList和RadioButtonList都非常容易实现。不得不承认,这两个控件还是非常实用的。

    但是在MVC中并没有相关的支持,可能微软觉得没必要了吧,不过真的有人讲这个功能完成了。

    代码摘抄自狼奔代码生成器。地址是:http://www.cnblogs.com/langben 有兴趣的可以研究下。

    CheckBoxListHelper:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Web;
    using System.Web.Mvc;
    using System.Linq.Expressions;
    namespace Models
    {
        public static class CheckBoxListHelper
        {
            /// <summary>
            /// CheckBox列表
            /// </summary>
            /// <param name="helper">辅助类</param>
            /// <param name="name">字段名称</param>
            /// <param name="selectList">集合</param>
            /// <returns></returns>
            public static MvcHtmlString CheckBoxList(this HtmlHelper helper, string name, IEnumerable<SelectListItem> selectList)
            {
                return CheckBoxList(helper, name, selectList, new { });
            }
            /// <summary>
            /// CheckBox列表
            /// </summary>
            /// <param name="helper">辅助类</param>
            /// <param name="name">字段名称</param>
            /// <param name="selectList">集合</param>
            /// <param name="htmlAttributes">html标签</param>
            /// <returns></returns>
            public static MvcHtmlString CheckBoxList(this HtmlHelper helper, string name, IEnumerable<SelectListItem> selectList, object htmlAttributes)
            {
                IDictionary<string, object> HtmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
                HashSet<string> set = new HashSet<string>();
                List<SelectListItem> list = new List<SelectListItem>();
                string selectedValues = Convert.ToString((selectList as SelectList).SelectedValue);
    
                if (!string.IsNullOrEmpty(selectedValues))
                {
                    if (selectedValues.Contains(","))
                    {
    
                        string[] tempStr = selectedValues.Split(',');
    
                        for (int i = 0; i < tempStr.Length; i++)
                        {
                            set.Add(tempStr[i]);
                        }
                    }
                    else
                    {
                        set.Add(selectedValues);
                    }
                }
                foreach (SelectListItem item in selectList)
                {
                    item.Selected = (item.Value != null) ? set.Contains(item.Value) : set.Contains(item.Text);
                    list.Add(item);
                }
                selectList = list;
                HtmlAttributes.Add("type", "checkbox");
                HtmlAttributes.Add("id", name);
                HtmlAttributes.Add("name", name);
                //HtmlAttributes.Add("style", "margin:0 0 0 10px;line-height:30px; vertical-align:-8px;border:none;");
                StringBuilder stringBuilder = new StringBuilder();
                foreach (SelectListItem selectItem in selectList)
                {
    
                    IDictionary<string, object> newHtmlAttributes = HtmlAttributes.DeepCopy();
                    newHtmlAttributes.Add("value", selectItem.Value);
                    if (selectItem.Selected)
                    {
                        newHtmlAttributes.Add("checked", "checked");
                    }
                    TagBuilder tagBuilder = new TagBuilder("input");
                    tagBuilder.MergeAttributes<string, object>(newHtmlAttributes);
                    string inputAllHtml = tagBuilder.ToString(TagRenderMode.SelfClosing);
                    stringBuilder.AppendFormat(@"<label style=""margin:0 0 0 10px;""> {0}  {1}</label>",
                       inputAllHtml, selectItem.Text);
                }
                return MvcHtmlString.Create(stringBuilder.ToString());
            }
            private static IDictionary<string, object> DeepCopy(this IDictionary<string, object> ht)
            {
                Dictionary<string, object> _ht = new Dictionary<string, object>();
                foreach (var p in ht)
                {
                    _ht.Add(p.Key, p.Value);
                }
                return _ht;
            }
    
        }
    }

    RadioButtonListHelper:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Web;
    using System.Web.Mvc;
    using System.Linq.Expressions;
    namespace Models
    {
        public static class RadioButtonListHelper
        {
            /// <summary>
            /// Radio列表
            /// </summary>
            /// <param name="htmlHelper">辅助类</param>
            /// <param name="selectList">集合</param>
            /// <param name="htmlAttributes">html标签</param>
            /// <param name="isChecked">默认单选状态</param>
            /// <returns></returns>
            public static MvcHtmlString RadioButtonListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, object htmlAttributes, bool isChecked = false)
            {
                string name = ExpressionHelper.GetExpressionText(expression);
                return RadioButtonList(htmlHelper, name, selectList, htmlAttributes,isChecked);
    
            }
    
    
            /// <summary>
            /// Radio列表
            /// </summary>
            /// <param name="htmlHelper">辅助类</param>
            /// <param name="selectList">集合</param>
            /// <param name="isChecked">默认单选状态</param>
            /// <returns></returns>
            public static MvcHtmlString RadioButtonListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, bool isChecked = false)
            {
                string name = ExpressionHelper.GetExpressionText(expression);
                return RadioButtonList(htmlHelper, name, selectList, new { },isChecked);
    
            }
    
            /// <summary>
            /// Radio列表
            /// </summary>
            /// <param name="htmlHelper">辅助类</param>
            /// <param name="name">字段名称</param>
            /// <param name="selectList">集合</param>
            /// <param name="htmlAttributes">html标签</param>
            /// <param name="isChecked">默认单选状态</param>
            /// <returns></returns>
           public  static MvcHtmlString RadioButtonList(this HtmlHelper htmlHelper, string name, IEnumerable<SelectListItem> selectList, object htmlAttributes, bool isChecked = false)
            {
                IDictionary<string, object> HtmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
                string defaultValue = string.Empty;
                if (htmlHelper.ViewData.Model != null)
                {
                    if (!string.IsNullOrWhiteSpace(name))
                    {
                        defaultValue = htmlHelper.ViewData.Eval(name) + "";
    
                    }
                        isChecked = false;
                   
                }
              
    
                StringBuilder str = new StringBuilder();
                foreach (SelectListItem item in selectList)
                {
                    str.Append("<input ");
                    if (item.Value == defaultValue)
                    {
                        str.Append("checked='checked' ");
    
                    }
                    if (isChecked)
                    {
                       
                        str.Append(" checked=true ");
                        isChecked = false;
                    } 
                    foreach (var bute in HtmlAttributes)
                    {
                        str.Append(bute.Key + "=\"" + bute.Value);
                        
                    }
                   
                    str.Append("\" id=\"" + item.Value + "\" type=\"radio\"  value=\"" + item.Value + "\" name=\"" + name + "\"/>");
                    str.Append(item.Text);
    
                }
    
    
                return MvcHtmlString.Create(str.ToString());
            }
        }
    }
  • 相关阅读:
    SQL Server 简单事务学习
    C# TreeView,递归循环数据加载到treeView1中
    javascript;Jquery;获取JSON对象,无刷新分页,异步加载,异步删除,实例。
    jquery获取当前页面的URL信息
    java的数据类型相关知识点
    java 图书馆初级编写
    1.1 弹出窗口控制
    轮播图片切换(函数传参)
    商品计算
    js中的作用域
  • 原文地址:https://www.cnblogs.com/jeffrey77/p/2859146.html
Copyright © 2011-2022 走看看