three ways creating custom helpers to show RadioButtonList in MVC

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")

 

 

posted on 2013-03-03 01:39  shcity  阅读(419)  评论(0编辑  收藏  举报

导航