2011-03-25 19 views
16

मेरे पास एक दृश्य है जहां मॉडल में वस्तुओं का संग्रह है। तब मैं संग्रह में प्रत्येक आइटम के लिए मूल्यों की एक सीमित संख्या में से एक को चुनने के लिए है कि उपयोगकर्ता के लिए एक dropdownlist बनाने का ख्याल रखता है एक EditorFor टेम्पलेट है:एमवीसी 3 आवेदन में ड्रॉपडाउन सूची के बजाय रेडियोबूटन?

@model Consultants.Models.ProgramSkill 
<tr> 
    <td>@Model.Program.Name 
    </td> 
     <td>@Model.Program.Category 
    </td> 
    <td> 
     @Html.DropDownListFor(model => model.Level, new SelectList(new[] { 0, 1, 2, 3, 4, 5 }, Model.Level)) 
    </td> 
</tr> 

लेकिन मैं नहीं बल्कि एक ही बात करने के लिए radiobuttons होता , क्या यह एमवीसी 3 में संभव है? यदि हां, तो कैसे?

उत्तर

8
@Html.RadioButtonFor(m => m.Level, 0) 
@Html.RadioButtonFor(m => m.Level, 1) 
@Html.RadioButtonFor(m => m.Level, 2) 
@Html.RadioButtonFor(m => m.Level, 3) 
@Html.RadioButtonFor(m => m.Level, 4) 
@Html.RadioButtonFor(m => m.Level, 5) 

या एक सरल पाश के साथ:

@for(int level = 0; level <= 5; level++) 
@Html.RadioButtonFor(m => m.Level, level) 
} 
+0

लेकिन इस के साथ, मैं कैसे वर्तमान में चयनित स्तर सेट करूँ? (जैसा कि मैं ड्रॉपडाउन सूची के साथ करता हूं) – Anders

+1

यदि स्तर एक int है तो इसे स्वचालित रूप से रेडियोबटन फॉर – hunter

20

कि एक कस्टम एचटीएमएल सहायक के लिए एक आदर्श उम्मीदवार होगा:

using System.Web.Mvc; 
using System.Web.Mvc.Html; 
using System.Text; 
using System.Collections.Generic; 
using System.Linq.Expressions; 
using System; 

public static class HtmlExtensions 
{ 
    public static MvcHtmlString RadioButtonListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> ex, IEnumerable<SelectListItem> values) 
    { 
     string name = ExpressionHelper.GetExpressionText(ex); 
     var sb = new StringBuilder(); 
     int counter = 1; 
     foreach (var item in values) 
     { 
      sb.Append(htmlHelper.RadioButtonFor(ex, item.Value, new { id = name + counter.ToString()})); 
      var label = new TagBuilder("label"); 
      label.SetInnerText(item.Text); 
      label.Attributes.Add("for", name + counter.ToString()); 
      sb.Append(label.ToString()); 
      counter++; 
     } 
     return MvcHtmlString.Create(sb.ToString()); 
    } 
} 

मॉडल:

public class MyViewModel 
{ 
    public IEnumerable<SelectListItem> Items { get; set; } 
    public string Level { get; set; } 
} 

नियंत्रक:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new MyViewModel 
     { 
      Level = "2", 
      Items = Enumerable.Range(1, 5).Select(x => new SelectListItem 
      { 
       Value = x.ToString(), 
       Text = "item " + x 
      }) 
     }; 
     return View(model); 
    } 
} 

और एक दृश्य:

@model AppName.Models.MyViewModel 

@using (Html.BeginForm()) 
{ 
    @Html.RadioButtonListFor(x => x.Level, Model.Items) 
    <input type="submit" value="OK" /> 
} 
+1

का उपयोग करके चुना जाएगा, मैंने रेडियो बटन आइटम को पूर्व-चयन करने की अनुमति देने के लिए उपरोक्त रेडियोबटन फॉर() विधि को संशोधित किया है (यह केवल चेक किए गए विशेषता को सेट करने का विषय है): sb.Append (htmlHelper.RadioButtonFor (ex, item.Value, (item.Selected? new {checked = ""}: null))); – BrokeMyLegBiking

+1

यह एक शानदार जवाब है, धन्यवाद! – jasongullickson