MVC 自己实现RadioButtonList方法

来源:互联网 发布:淘宝游戏王店铺推荐 编辑:程序博客网 时间:2024/05/29 08:11

博主的原则一贯就是有图有真相:
这里写图片描述

代码实现如下:

using System.Collections.Generic;using System.ComponentModel;using System.Linq;using System.Text;using System.Web.Mvc.Html;using System.Web.UI.WebControls;namespace System.Web.Mvc{    public static class RadioButtonListExtensions    {        public static IEnumerable<SelectListItem> ToSelectList(this Enum enumValue)        {            return from Enum e in Enum.GetValues(enumValue.GetType())                   select new SelectListItem                   {                       Selected = e.Equals(enumValue),                       Text = e.ToDescription(),                       Value = Convert.ToInt32(Enum.Parse(enumValue.GetType(), e.ToString(), true)).ToString()                   };        }        public static string ToDescription(this Enum value)        {            var attributes = (DescriptionAttribute[])value.GetType().GetField(              value.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), false);            return attributes.Length > 0 ? attributes[0].Description : value.ToString();        }        public static MvcHtmlString RadioButtonList(this HtmlHelper htmlHelper, string name,            IEnumerable<SelectListItem> selectList, RepeatDirection repeatDirection = RepeatDirection.Horizontal)        {            var sb = new StringBuilder();            if (selectList != null)            {                foreach (SelectListItem item in selectList)                {                    var label = htmlHelper.Label(name, item.Text, new { onClick = "$('input[type=\"radio\"][name=\"" + name + "\"]').removeAttr('checked'); $(this).prev().prop('checked','checked'); " });                    var radio = htmlHelper.RadioButton(name, item.Value, item.Selected, new { id = name + "_" + item.Value }).ToHtmlString();                    sb.AppendFormat("<{2} class=\"RadioButton\">{0}{1}</{2}>",                       radio, label, (repeatDirection == RepeatDirection.Horizontal ? "span" : "div"));                }            }            return MvcHtmlString.Create(sb.ToString());        }    }}

RadioButtonList的枚举如下:

using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace System.Web.Mvc{    public enum RadioButtonListEnum    {        葫芦娃1 = 1,        葫芦娃2 = 2,        葫芦娃3 = 3,        葫芦娃4 = 4,        葫芦娃5 = 5,        葫芦娃6 = 6,        葫芦娃7 = 7    }}

前台调用如下:

@{    ViewBag.Title = "Home Page";}<div class="jumbotron">    <h1>葫芦娃的MVC</h1>    <p class="lead">葫芦娃测试MVC</p></div><div class="row">    <div class="col-md-4">        <h2>Get RadioButtonList Horizontal</h2>        <p>@Html.RadioButtonList("HuLuWaRadioButton",  RadioButtonListEnum.葫芦娃1.ToSelectList(),System.Web.UI.WebControls.RepeatDirection.Horizontal)</p>    </div>    <div class="col-md-4">        <h2>Get RadioButtonList Vertical</h2>        <p>@Html.RadioButtonList("HuLuWaRadioButton", RadioButtonListEnum.葫芦娃1.ToSelectList(), System.Web.UI.WebControls.RepeatDirection.Vertical)</p>    </div></div>