दिलचस्प पोस्ट
रेल में, आप एक दृश्य का उपयोग करके JSON को कैसे प्रस्तुत करते हैं? java.lang.NoClassDefFound त्रुटि: org / hamcrest / सेल्फ डिस्क्रिप्टिंग Gmail में .NET के माध्यम से ईमेल भेजा जा रहा है URLEncoder अंतरिक्ष वर्ण का अनुवाद करने में सक्षम नहीं है बाहर क्लिक करके jquery ड्रॉप डाउन मेनू बंद हो जाता है श्रेणी खोजों के लिए जावा मैप का उपयोग करना एंड्रॉइड स्टूडियो कैसे रीसेट करें गिटूब पर एक मेवेन रिपॉजिटरी होस्टिंग डॉलर ($) में प्रवेश पासवर्ड स्ट्रिंग चर के रूप में माना जाता है स्केल फ़ंक्शन 22 पैरामीटर तक सीमित क्यों हैं? जावा थ्रेड सृजन ओवरहेड अजगर: एन-लगभग-बराबर-लम्बी विभाजनों में एक सूची का टुकड़ा करना रेडियो बटन और एक ही लाइन में प्रदर्शित करने के लिए लेबल जावा से पर्यावरण चर कैसे सेट करूं? $ लुकअप ऑपरेटर का इस्तेमाल करते हुए कई परिस्थितियों में शामिल हों

क्या किसी को एएसपी.नेट एमवीसी के लिए रेडियोबटन लिस्टफ़ोल्डर <टी> लागू किया गया है?

एएसपी.नेट एमवीसी फ्यूचर्स में एक Html.RadioButtonList एक्सटेंशन विधि थी। क्या किसी को एक जोरदार टाइप किए गए संस्करण RadioButtonListFor<T> के लिए कोई कोड मिला यह एक दृश्य में ऐसा दिखेगा:

 <%= Html.RadioButtonListFor(model=>model.Item,Model.ItemList) %> 

वेब के समाधान से एकत्रित समाधान "क्या किसी को एएसपी.नेट एमवीसी के लिए रेडियोबटन लिस्टफ़ोल्डर <टी> लागू किया गया है?"

यहां एएसपीएक्स पृष्ठ में उपयोग किया गया है

  <%= Html.RadioButtonListFor(m => m.GenderRadioButtonList)%> 

यहां दृश्य मॉडल है

 public class HomePageViewModel { public enum GenderType { Male, Female } public RadioButtonListViewModel<GenderType> GenderRadioButtonList { get; set; } public HomePageViewModel() { GenderRadioButtonList = new RadioButtonListViewModel<GenderType> { Id = "Gender", SelectedValue = GenderType.Male, ListItems = new List<RadioButtonListItem<GenderType>> { new RadioButtonListItem<GenderType>{Text = "Male", Value = GenderType.Male}, new RadioButtonListItem<GenderType>{Text = "Female", Value = GenderType.Female} } }; } } 

रेडियो बटन सूचियों के लिए उपयोग किया गया दृश्य मॉडल यहां है

 public class RadioButtonListViewModel<T> { public string Id { get; set; } private T selectedValue; public T SelectedValue { get { return selectedValue; } set { selectedValue = value; UpdatedSelectedItems(); } } private void UpdatedSelectedItems() { if (ListItems == null) return; ListItems.ForEach(li => li.Selected = Equals(li.Value, SelectedValue)); } private List<RadioButtonListItem<T>> listItems; public List<RadioButtonListItem<T>> ListItems { get { return listItems; } set { listItems = value; UpdatedSelectedItems(); } } } public class RadioButtonListItem<T> { public bool Selected { get; set; } public string Text { get; set; } public T Value { get; set; } public override string ToString() { return Value.ToString(); } } 

रेडियोबटन लिस्टफॉर के लिए यहां विस्तार विधियां हैं I

 public static class HtmlHelperExtensions { public static string RadioButtonListFor<TModel, TRadioButtonListValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, RadioButtonListViewModel<TRadioButtonListValue>>> expression) where TModel : class { return htmlHelper.RadioButtonListFor(expression, null); } public static string RadioButtonListFor<TModel, TRadioButtonListValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, RadioButtonListViewModel<TRadioButtonListValue>>> expression, object htmlAttributes) where TModel : class { return htmlHelper.RadioButtonListFor(expression, new RouteValueDictionary(htmlAttributes)); } public static string RadioButtonListFor<TModel, TRadioButtonListValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, RadioButtonListViewModel<TRadioButtonListValue>>> expression, IDictionary<string, object> htmlAttributes) where TModel : class { var inputName = GetInputName(expression); RadioButtonListViewModel<TRadioButtonListValue> radioButtonList = GetValue(htmlHelper, expression); if (radioButtonList == null) return String.Empty; if (radioButtonList.ListItems == null) return String.Empty; var divTag = new TagBuilder("div"); divTag.MergeAttribute("id", inputName); divTag.MergeAttribute("class", "radio"); foreach (var item in radioButtonList.ListItems) { var radioButtonTag = RadioButton(htmlHelper, inputName, new SelectListItem{Text=item.Text, Selected = item.Selected, Value = item.Value.ToString()}, htmlAttributes); divTag.InnerHtml += radioButtonTag; } return divTag + htmlHelper.ValidationMessage(inputName, "*"); } public static string GetInputName<TModel, TProperty>(Expression<Func<TModel, TProperty>> expression) { if (expression.Body.NodeType == ExpressionType.Call) { var methodCallExpression = (MethodCallExpression)expression.Body; string name = GetInputName(methodCallExpression); return name.Substring(expression.Parameters[0].Name.Length + 1); } return expression.Body.ToString().Substring(expression.Parameters[0].Name.Length + 1); } private static string GetInputName(MethodCallExpression expression) { // p => p.Foo.Bar().Baz.ToString() => p.Foo OR throw... var methodCallExpression = expression.Object as MethodCallExpression; if (methodCallExpression != null) { return GetInputName(methodCallExpression); } return expression.Object.ToString(); } public static string RadioButton(this HtmlHelper htmlHelper, string name, SelectListItem listItem, IDictionary<string, object> htmlAttributes) { var inputIdSb = new StringBuilder(); inputIdSb.Append(name) .Append("_") .Append(listItem.Value); var sb = new StringBuilder(); var builder = new TagBuilder("input"); if (listItem.Selected) builder.MergeAttribute("checked", "checked"); builder.MergeAttribute("type", "radio"); builder.MergeAttribute("value", listItem.Value); builder.MergeAttribute("id", inputIdSb.ToString()); builder.MergeAttribute("name", name + ".SelectedValue"); builder.MergeAttributes(htmlAttributes); sb.Append(builder.ToString(TagRenderMode.SelfClosing)); sb.Append(RadioButtonLabel(inputIdSb.ToString(), listItem.Text, htmlAttributes)); sb.Append("<br>"); return sb.ToString(); } public static string RadioButtonLabel(string inputId, string displayText, IDictionary<string, object> htmlAttributes) { var labelBuilder = new TagBuilder("label"); labelBuilder.MergeAttribute("for", inputId); labelBuilder.MergeAttributes(htmlAttributes); labelBuilder.InnerHtml = displayText; return labelBuilder.ToString(TagRenderMode.Normal); } public static TProperty GetValue<TModel, TProperty>(HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression) where TModel : class { TModel model = htmlHelper.ViewData.Model; if (model == null) { return default(TProperty); } Func<TModel, TProperty> func = expression.Compile(); return func(model); } } 

एमवीसी 3 उदाहरण जो 1 विकल्प का चयन करने के लिए सत्यापन के साथ 3 रेडियो बटन बनाता है। और अगर फॉर्म सत्यापन में विफल रहता है (उदाहरण के लिए अन्य फ़ील्ड पर) चुना हुआ रेडियो विकल्प तब होता है, जब फॉर्म फिर से शुरू होता है

राय

 @Html.RadioButtonForSelectList(m => m.TestRadio, Model.TestRadioList) @Html.ValidationMessageFor(m => m.TestRadio) 

आदर्श

 public class aTest { public Int32 ID { get; set; } public String Name { get; set; } } public class LogOnModel { public IEnumerable<SelectListItem> TestRadioList { get; set; } [Required(ErrorMessage="Test Error")] public String TestRadio { get; set; } [Required] [Display(Name = "User name")] public string UserName { get; set; } } 

नियंत्रक क्रियाएँ

 public ActionResult LogOn() { List<aTest> list = new List<aTest>(); list.Add(new aTest() { ID = 1, Name = "Line1" }); list.Add(new aTest() { ID = 2, Name = "Line2" }); list.Add(new aTest() { ID = 3, Name = "Line3" }); SelectList sl = new SelectList(list, "ID", "Name"); var model = new LogOnModel(); model.TestRadioList = sl; return View(model); } [HttpPost] public ActionResult LogOn(LogOnModel model, string returnUrl) { if (ModelState.IsValid) { .... } // If we got this far, something failed, redisplay form List<aTest> list = new List<aTest>(); list.Add(new aTest() { ID = 1, Name = "Line1" }); list.Add(new aTest() { ID = 2, Name = "Line2" }); list.Add(new aTest() { ID = 3, Name = "Line3" }); SelectList sl = new SelectList(list, "ID", "Name"); model.TestRadioList = sl; return View(model); } 

यहां विस्तार है:

 public static class HtmlExtensions { public static MvcHtmlString RadioButtonForSelectList<TModel, TProperty>( this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> listOfValues) { var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); var sb = new StringBuilder(); if (listOfValues != null) { foreach (SelectListItem item in listOfValues) { var id = string.Format( "{0}_{1}", metaData.PropertyName, item.Value ); var radio = htmlHelper.RadioButtonFor(expression, item.Value, new { id = id }).ToHtmlString(); sb.AppendFormat( "<label for=\"{0}\">{1}</label> {2}", id, HttpUtility.HtmlEncode(item.Text), radio ); } } return MvcHtmlString.Create(sb.ToString()); } } 

ठीक है, मुझे पता है कि यह आपके प्रश्न का सीधा जवाब नहीं है, लेकिन वैसे भी अधिकांश इनपुट करने का यह एक बेहतर तरीका हो सकता है (और यह मज़ेदार था)। मैंने केवल यह पूरा कर लिया है और उसके खिलाफ एक छोटी सी परीक्षा चलायी है, इसलिए मैं यह सुनिश्चित नहीं कर सकता कि यह हर परिस्थिति में परिपूर्ण है।

मुझे जिमी बोगर्ड के पोस्ट से यह विचार मिला है । देखो, क्योंकि वहां वास्तव में शांत विचारों का ढेर है।

मैंने जो किया है वह "InputFor" हेल्पर बनाया गया है जो कि आपके द्वारा पूछे जाने वाले इनपुट के लिए सबसे अच्छा काम करता है और इसके अनुसार उसे आउटपुट करता है। यह रेडियो बटन करता है, लेकिन यदि दो से अधिक हो तो ड्रॉप डाउन में चूक जाएगी, आपको इस कार्यक्षमता को आसानी से बदलने में सक्षम होना चाहिए।

नीचे कोड आपको <%= Html.InputFor(m => m.Gender) %> या <%Html.InputFor(m => m.Gender, Model.GenderList)%> जैसे कॉल करने की अनुमति देता है। अंत में एक अच्छा छोटा सा है, जो आपको सम्मेलन द्वारा कोडिंग करने की अनुमति देता है, लेकिन हम इसे बाद में प्राप्त करेंगे

 public static MvcHtmlString InputFor<TModel>(this HtmlHelper<TModel> helper, Expression<Func<TModel, object>> field, Dictionary<string, string> listing) where TModel : class { string property_name = GetInputName(field); PropertyDescriptor descriptor = TypeDescriptor.GetProperties(helper.ViewData.Model).Find(property_name, true); string property_type = descriptor.PropertyType.Name; var func = field.Compile(); var value = func(helper.ViewData.Model); //Add hidden element if required if (descriptor.Attributes.Contains(new HiddenInputAttribute())) { return helper.Hidden(property_name, value); } if (property_type == "DateTime" || property_type == "Date") { return helper.TextBox(property_name, value, new { @class = "date_picker" }); } if (listing != null) { if (listing.Count <= 2) { //This is a good length for a radio button string output = ""; foreach (KeyValuePair<string, string> pair in listing) { TagBuilder label = new TagBuilder("label"); label.MergeAttribute("for", property_name); label.SetInnerText(pair.Value); output += helper.RadioButton(property_name, pair.Key, (value == pair.Key)).ToHtmlString(); output += label.ToString(); } return MvcHtmlString.Create(output); } else { //too big for a radio button, lets make a drop down return helper.DropDownList(property_name, new SelectList(listing, "Key", "Value"), value); } } else { if (property_type == "Boolean") { listing = new Dictionary<string, string>(); listing.Add("true", "Yes"); listing.Add("false", "No"); SelectList select_values = new SelectList(listing, "Key", "Value", ((bool)value ? "Yes" : "No")); return helper.DropDownList(property_name, select_values); } return helper.TextBox(property_name, value); } } 

कन्वेंशन द्वारा कोडिंग

नीचे दिए गए कोड इस संबंध में कॉन्फ़िगरेशन पर ध्यान देने की अनुमति देता है। इसका एक उदाहरण है यदि आपके पास एक मॉडल ऑब्जेक्ट है जिसमें उस संपत्ति को शामिल किया गया है जिसे आप (लिंग) और एक नेम के साथ एक ही नाम से जोड़ना चाहते हैं, लेकिन "सूची" (लिंग-सूची) के साथ जोड़ा गया है, तो यह इस सूची को डिफ़ॉल्ट रूप से उपयोग करेगा

उदा। <%= Html.InputFor(m => m.Gender) %> एक पूर्ण ड्रॉप डाउन सूची / रेडियो बटन समूह बना सकता है, लेकिन ये डिफ़ॉल्ट मान कॉल की तरह <%= Html.InputFor(m => m.Gender, alternate_list) %>

 public static MvcHtmlString InputFor<TModel>(this HtmlHelper<TModel> helper, Expression<Func<TModel, object>> field) where TModel : class { string property_name = GetInputName(field) + "List"; PropertyDescriptor list_descriptor = TypeDescriptor.GetProperties(helper.ViewData.Model).Find(property_name, true); Dictionary<string, string> listing = null; if (list_descriptor != null) { //Found a match for PropertyNameList, try to pull it out so we can use it PropertyInfo temp = helper.ViewData.Model.GetType().GetProperty(property_name); listing = (Dictionary<string, string>)temp.GetValue(helper.ViewData.Model, null); } return InputFor(helper, field, listing); } 

अब एक मामूली अस्वीकरण:

  • यह दुनिया का सबसे तेज कोड नहीं है (प्रतिबिंब और अन्य चीजों के कारण), मेरी स्थिति में यह वास्तव में प्रासंगिक नहीं है क्योंकि यह सभी उपयोगकर्ता संचालित है, अगर आप कुछ बेवकूफ काम करने की योजना बना रहे हैं
  • यह कोड अपनी प्रारंभिक अवस्था में है, मैं इसे और अधिक अच्छी तरह से जांच कर और अगले कुछ दिनों में इसे जोड़कर कोड सुधारने के लिए किसी भी सुझाव के लिए खुला।

मुझे उम्मीद है कि यह कोड किसी के लिए उपयोगी है, मुझे पता है कि मैं इसे अगले कुछ हफ्तों में उपयोग करने के लिए समय का उपयोग करने और कटौती करने के लिए उपयोग कर रहा हूँ। बस इसे रेखांकित करने के लिए नीचे काटने का काम एक तुच्छ काम होना चाहिए, शुभकामनाएं 🙂

नीलकंठ

जॉन पोस्ट में आधारित, HTMLAttributtes के साथ उल के रूप में रेडियो बटन सूची उत्पन्न करने के लिए एक छोटा सुधार

 public static MvcHtmlString RadioButtonListFor<TModel, TProperty>( this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> listOfValues, IDictionary<string, object> radioHtmlAttributes = null, string ulClass = null) { ModelMetadata metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); if (radioHtmlAttributes == null) radioHtmlAttributes = new RouteValueDictionary(); TagBuilder ulTag = new TagBuilder("ul"); if (!String.IsNullOrEmpty(ulClass)) ulTag.MergeAttribute("class", ulClass); if (listOfValues != null) { // Create a radio button for each item in the list foreach (SelectListItem item in listOfValues) { // Generate an id to be given to the radio button field var id = string.Format("{0}_{1}", metaData.PropertyName, item.Value); if (!radioHtmlAttributes.ContainsKey("id")) radioHtmlAttributes.Add("id", id); else radioHtmlAttributes["id"] = id; // Create and populate a radio button using the existing html helpers var label = htmlHelper.Label(id, HttpUtility.HtmlEncode(item.Text)); var radio = htmlHelper.RadioButtonFor(expression, item.Value, radioHtmlAttributes).ToHtmlString(); // Create the html string that will be returned to the client // eg <input data-val="true" data-val-required="You must select an option" id="TestRadio_1" name="TestRadio" type="radio" value="1" /><label for="TestRadio_1">Line1</label> ulTag.InnerHtml += string.Format("<li>{0}{1}</li>", radio, label); } } return MvcHtmlString.Create(ulTag.ToString(TagRenderMode.Normal)); } public static MvcHtmlString RadioButtonListFor<TModel, TProperty>( this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> listOfValues, object radioHtmlAttributes = null, string ulClass = null) { return RadioButtonListFor<TModel, TProperty>(htmlHelper, expression, listOfValues, new RouteValueDictionary(radioHtmlAttributes), ulClass); } 

मैंने कुछ इसी तरह एमवीसी 1.0 में लागू किया है। देखें कि यह आपके लिए उपयोगी होगा या नहीं:

  public static string RadioButtonList2(this HtmlHelper _helper, string _name, IEnumerable<SelectListItem> _items, string _selectedValue, string _seperator) { return RadioButtonList2(_helper, _name, _items, _selectedValue, _seperator, null); } public static string RadioButtonList2(this HtmlHelper _helper, string _name, IEnumerable<SelectListItem> _items, string _selectedValue, string _seperator, IDictionary<string, object> _htmlAttributes) { StringBuilder _outputScript = new StringBuilder(); foreach (var item in _items) { var optionField = new TagBuilder("input"); optionField.MergeAttribute("name", _name); optionField.MergeAttribute("id", _name); optionField.MergeAttribute("class", _name); optionField.MergeAttribute("value", item.Value); optionField.MergeAttribute("type", "radio"); // Check to see if it's checked if (item.Value == _selectedValue) optionField.MergeAttribute("checked", "checked"); if (_htmlAttributes != null) optionField.MergeAttributes(_htmlAttributes); _outputScript.Append(optionField.ToString(TagRenderMode.SelfClosing)); _outputScript.Append("<label style=\"display:inline;\">"); _outputScript.Append(item.Text); _outputScript.Append("</label>" + _seperator); } return _outputScript.ToString(); } 

नियंत्रक में, आप परिणाम को निम्नानुसार वापस कर सकते हैं:

  ViewData["GenderList"] = new SelectList(new[] { new { Value = "M", Text = "Male" }, new { Value = "F", Text = "Female" }, new { Value = "A", Text = "All" } }, "Value", "Text"); 

या

  ViewData["GenderList"] = new SelectList(_resultFromSomeLinqQuery, "GenderID", "GenderName"); 

और देखें में इस प्रकार का प्रयोग करें:

 <%= Html.RadioButtonList2("Sex", ViewData["GenderList"] as SelectList, ViewData["SelectedSex"].ToString(), "&nbsp;")%> 

आप &nbsp; को भी बदल सकते हैं अलग लाइनों में उन्हें प्रदर्शित करने के लिए < <BR /> साथ

उम्मीद है की यह मदद करेगा।

सादर एनवाईड अकरम न्वाइड @ xgeno.com

यहां एक अच्छा 'पतला' अच्छा जवाब 'VB में जवाब है मेरे लिए काम करता है, लेकिन यह एक पूर्ण समाधान नहीं है

 <Extension()> _ Public Function RadioButtonListFor(Of TModel, TProperty)(ByVal htmlHelper As System.Web.Mvc.HtmlHelper(Of TModel), ByVal expression As System.Linq.Expressions.Expression(Of System.Func(Of TModel, TProperty)), ByVal selectList As System.Collections.Generic.IEnumerable(Of System.Web.Mvc.SelectListItem), ByVal htmlAttributes As Object) As System.Web.Mvc.MvcHtmlString 'Return htmlHelper.DropDownListFor(expression, selectList, htmlAttributes) If selectList Is Nothing OrElse selectList.Count = 0 Then Return MvcHtmlString.Empty Dim divTag = New TagBuilder("div") divTag.MergeAttributes(New RouteValueDictionary(htmlAttributes)) Dim name = CType(expression.Body, System.Linq.Expressions.MemberExpression).Member.Name Dim value = expression.Compile()(htmlHelper.ViewData.Model) Dim sb As New StringBuilder() For Each item In selectList sb.AppendFormat("<input id=""{0}_{1}"" type=""radio"" name=""{0}"" value=""{1}"" {2} />", name, item.Value, If(item.Value = value.ToString, """checked""", "")) sb.AppendFormat("<label for=""{0}_{1}"">{2}</label>", name, item.Value, item.Text) Next divTag.InnerHtml = sb.ToString Return MvcHtmlString.Create(divTag.ToString) End Function 

मैंने मैक के समाधान को संशोधित किया और डेटाबेस तालिका में Enum प्रकार को बदल दिया, मेरी तालिका है:

यहां छवि विवरण दर्ज करें

मेरे आवेदन में मैं लिंग वरीयताओं के अनुसार कमरे को किराए पर ले रहा हूं। लिंग रडियस संपत्ति के साथ मेरा मॉडल:

 public partial class Room { public RadioButtonListViewModel GenderRadios { get; set; } //... } 

कमरे नियंत्रक में, मैं रेडियो तैयार कर रहा हूं:

  private void fillRadios(Room room) { List<Gender> genders = fre.Genders.ToList(); room.GenderRadios= new RadioButtonListViewModel(); room.GenderRadios.ListItems = new List<RadioButtonListItem>(); foreach (Gender gender in genders) room.GenderRadios.ListItems.Add(new RadioButtonListItem { Text = gender.Name, Value = gender.Id, Selected= (room.GenderId == gender.Id)}); } 

अंत में, मैं कमरे बनाने के लिए इसका उपयोग करता हूं:

 <tr> <td>Gender</td> <%= Html.RadioButtonListFor(m => m.GenderRadios, "GenderRadiosForRoomCreate")%> </tr> 

और संपादन कमरे के लिए:

 <tr> <td>Gender</td> <%= Html.RadioButtonListFor(m => m.GenderRadios, "GenderRadiosForRoomEdit")%> </tr> 

बनाएँ कमरा html दिखता है:

 <td id="GenderRadisoForRoomCreate_Container"> <input id="GenderRadisoForRoomCreate_Any" name="GenderRadisoForRoomCreate_value" value="1" type="radio"><label for="GenderRadisoForRoomCreate_Any">Any</label> <input id="GenderRadisoForRoomCreate_Female" name="GenderRadisoForRoomCreate_value" value="2" type="radio"><label for="GenderRadisoForRoomCreate_Female">Female</label> <input id="GenderRadisoForRoomCreate_Male" name="GenderRadisoForRoomCreate_value" value="3" type="radio"><label for="GenderRadisoForRoomCreate_Male">Male</label> </td> 

जब कमरा बनाया:

 [HttpPost] public ActionResult RoomCreate(Room room, FormCollection formValues, int? GenderRadiosForRoomCreate_value, int? SmokingRadiosForRoomCreate_value) { room.GenderId = GenderRadiosForRoomCreate_value; room.SmokingId = SmokingRadiosForRoomCreate_value; //... } 

यहां मददकर्त्ता वर्ग है:

 public class RadioButtonListViewModel { public int Id { get; set; } private int selectedValue; public int SelectedValue { get { return selectedValue; } set { selectedValue = value; UpdatedSelectedItems(); } } private void UpdatedSelectedItems() { if (ListItems == null) return; ListItems.ForEach(li => li.Selected = Equals(li.Value, SelectedValue)); } private List<RadioButtonListItem> listItems; public List<RadioButtonListItem> ListItems { get { return listItems; } set { listItems = value; UpdatedSelectedItems(); } } } public class RadioButtonListItem { public bool Selected { get; set; } public string Text { get; set; } public int Value { get; set; } public override string ToString() { return Value.ToString(); } } public static class HtmlHelperExtensions { /* tagBase: I used tagBase string for building other tag's Id or Name on this. ie for tagBase="GenderRadiosForRoomCreate" <td id="GenderRadisoForRoomCreate_Container"> <input id="GenderRadisoForRoomCreate_Any" name="GenderRadisoForRoomCreate_value" value="1" type="radio"><label for="GenderRadisoForRoomCreate_Any">Any</label> <input id="GenderRadisoForRoomCreate_Female" name="GenderRadisoForRoomCreate_value" value="2" type="radio"><label for="GenderRadisoForRoomCreate_Female">Female</label> <input id="GenderRadisoForRoomCreate_Male" name="GenderRadisoForRoomCreate_value" value="3" type="radio"><label for="GenderRadisoForRoomCreate_Male">Male</label> </td> */ public static string RadioButtonListFor<TModel>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, RadioButtonListViewModel>> expression, String tagBase) where TModel : class { return htmlHelper.RadioButtonListFor(expression, tagBase, null); } public static string RadioButtonListFor<TModel>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, RadioButtonListViewModel>> expression, String tagBase, object htmlAttributes) where TModel : class { return htmlHelper.RadioButtonListFor(expression, tagBase, new RouteValueDictionary(htmlAttributes)); } public static string RadioButtonListFor<TModel>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, RadioButtonListViewModel>> expression, String tagBase, IDictionary<string, object> htmlAttributes) where TModel : class { var inputName = tagBase; RadioButtonListViewModel radioButtonList = GetValue(htmlHelper, expression); if (radioButtonList == null) return String.Empty; if (radioButtonList.ListItems == null) return String.Empty; var containerTag = new TagBuilder("td"); containerTag.MergeAttribute("id", inputName + "_Container"); foreach (var item in radioButtonList.ListItems) { var radioButtonTag = RadioButton(htmlHelper, inputName, new SelectListItem{Text=item.Text, Selected = item.Selected, Value = item.Value.ToString()}, htmlAttributes); containerTag.InnerHtml += radioButtonTag; } return containerTag.ToString(); } public static string RadioButton(this HtmlHelper htmlHelper, string name, SelectListItem listItem, IDictionary<string, object> htmlAttributes) { var inputIdSb = new StringBuilder(); inputIdSb.Append(name); var sb = new StringBuilder(); var builder = new TagBuilder("input"); if (listItem.Selected) builder.MergeAttribute("checked", "checked"); builder.MergeAttribute("type", "radio"); builder.MergeAttribute("value", listItem.Value); builder.MergeAttribute("id", inputIdSb.ToString() + "_" + listItem.Text); builder.MergeAttribute("name", name + "_value"); builder.MergeAttributes(htmlAttributes); sb.Append(builder.ToString(TagRenderMode.SelfClosing)); sb.Append(RadioButtonLabel(inputIdSb.ToString(), listItem.Text, htmlAttributes)); return sb.ToString(); } public static string RadioButtonLabel(string inputId, string displayText, IDictionary<string, object> htmlAttributes) { var labelBuilder = new TagBuilder("label"); labelBuilder.MergeAttribute("for", inputId + "_" + displayText); labelBuilder.MergeAttributes(htmlAttributes); labelBuilder.InnerHtml = displayText; return labelBuilder.ToString(TagRenderMode.Normal); } public static TProperty GetValue<TModel, TProperty>(HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression) where TModel : class { TModel model = htmlHelper.ViewData.Model; if (model == null) { return default(TProperty); } Func<TModel, TProperty> func = expression.Compile(); return func(model); } }