first way is using the extension method to build the helper:
public class ListOption { public string Text { get; set; } public object Value { get; set; } } public static class CustomHelperExtensions { public static MvcHtmlString RadioButtonList(this HtmlHelper helper, string name, object selectedValue, params ListOption[] options) { int i = 0; StringBuilder builder = new StringBuilder(); foreach (var option in options) { bool isChecked = selectedValue == null ? false : selectedValue.ToString() == option.Value.ToString(); var controlId = name + i; var mvcString = helper.RadioButton(name, option.Value, isChecked, new { id = controlId }); builder.AppendLine(mvcString.ToHtmlString()); TagBuilder tag = new TagBuilder("label"); tag.MergeAttribute("for", controlId); tag.InnerHtml = option.Text; builder.AppendLine(tag.ToString()); i++; } return MvcHtmlString.Create(builder.ToString()); } public static MvcHtmlString RadioButtonList(this HtmlHelper helper, string name, object selectedValue, params string[] options) { var newOptions = new List<ListOption>(); foreach (var option in options) { newOptions.Add(new ListOption { Text = option, Value = option }); } return helper.RadioButtonList(name, selectedValue, newOptions.ToArray()); } public static MvcHtmlString YesNoRadioButtonList(this HtmlHelper helper, string name, object selectedValue) { return helper.RadioButtonList(name, selectedValue, "Yes", "No"); } }
second way is building helpers in current view page:
@helper RadioButtonList(string name, object selectedValue, params ListOption[] options) { int i = 0; foreach (var option in options) { bool isChecked = selectedValue == null? false : selectedValue.ToString() == option.Value.ToString(); string id = name + i; @Html.RadioButton(name, option.Value, isChecked, new { id = id }) <label for="@id"> @option.Text</label> i++; } } @helper RadioButtonList(string name, object selectedValue, params string[] options) { var newOptions = new List<ListOption>(); foreach (var option in options) { newOptions.Add(new ListOption { Text = option, Value = option }); } @RadioButtonList(name, selectedValue, newOptions.ToArray()); } @helper YesNoRadioButtonList(string name, object selectedValue) { @RadioButtonList(name, selectedValue, "Yes", "No"); }
the third way is building helpers in a view under App_Code folder:
@using MVC = System.Web.Mvc; @using System.Web.Mvc.Html; @using MvcApplication8.Models; @helper RadioButtonList(MVC.HtmlHelper htmlHelper, string name, object selectedValue, params ListOption[] options) { int i = 0; foreach (var option in options) { bool isChecked = selectedValue == null ? false : selectedValue.ToString() == option.Value.ToString(); string id = name + i; @htmlHelper.RadioButton(name, option.Value, isChecked, new { id = id }) <label for="@id">@option.Text</label> i++; } } @helper RadioButtonList(MVC.HtmlHelper htmlHelper, string name, object selectedValue, params string[] options) { var newOptions = new List<ListOption>(); foreach (var option in options) { newOptions.Add(new ListOption { Text = option, Value = option }); } @RadioButtonList(htmlHelper, name, selectedValue, newOptions.ToArray()); } @helper YesNoRadioButtonList(MVC.HtmlHelper htmlHelper, string name, object selectedValue) { @RadioButtonList(htmlHelper, name, selectedValue, "Yes", "No"); }
how to use these helpers:
@YesNoRadioButtonList("myo1", "") <br /> @RadioButtonList("myo2", "", new ListOption[] { new ListOption { Text = "Yes", Value = 1 }, new ListOption { Text = "No", Value = 2 } }) <br /> @RadioButtonList("myo3", "", "A", "B", "C", "D") <hr /> <br/> @Html.YesNoRadioButtonList("myo4", "") <br /> @Html.RadioButtonList("myo5", "", new ListOption[] { new ListOption { Text = "Yes", Value = 1 }, new ListOption { Text = "No", Value = 2 } }) <br /> @Html.RadioButtonList("myo6", "", "A", "B", "C", "D") <hr /> <br/> @CustomHelpers.YesNoRadioButtonList(Html,"myo7", "") <br /> @CustomHelpers.RadioButtonList(Html, "myo8", "", new ListOption[] { new ListOption { Text = "Yes", Value = 1 }, new ListOption { Text = "No", Value = 2 } }) <br /> @CustomHelpers.RadioButtonList(Html, "myo9", "", "A", "B", "C", "D")