博主的原则一贯就是有图有真相:
代码实现如下:
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>