2010-04-08 9 views

Odpowiedz

10

This question on StackOverflow zajmuje się RadioButtonListFor, a odpowiedź odpowiada również na twoje pytanie. Możesz ustawić wybraną właściwość w RadioButtonListViewModel.

14

Zakładam, że powinieneś mieć grupę przycisków opcji. coś może być jak

<%=Html.RadioButtonFor(m => m.Gender,"Male")%> 
<%=Html.RadioButtonFor(m => m.Gender,"Female")%> 
<%=Html.RadioButtonFor(m => m.Gender,"Unknown")%> 

Można podać wartość domyślną m.Gender = „Nieznany” (lub coś) z kontrolera.

+0

Ale chcę tylko dwa RadioButton z jednym z nich sprawdzone bydefault użyciu Html.RadiobuttonFor() – coolguy97

+4

Walczyłem z tym, jak dobrze, ale uznało tę odpowiedź jest tak prosty. Jeśli utworzysz właściwość w swoim modelu, powiedzmy Płeć, w domyślnym konstruktorze twojego modelu, ustaw tę właściwość na domyślną płeć, na przykład 'Gender =" Mężczyzna ";'. Jeśli to zrobisz, mvc.net automatycznie wybierze wartość domyślną, a na poczcie zwrotnej automatycznie zwiąże wybraną wartość z twoją własnością płci. – farcrats

0

Jeśli używasz jquery, możesz wywołać to tuż przed przyciskami opcji.

$('input:radio:first').attr('checked', true); 

^ta sprawdzi pierwsze pole radiowe, ale można spojrzeć na więcej jQuery do przechodzenia z jednej chcesz wybrany.

12

To nie jest zbyt ładna, ale jeśli trzeba wdrożyć tylko niewiele przycisków radiowych dla całej witryny, coś w tym może być również opcja:

<%=Html.RadioButtonFor(m => m.Gender,"Male",Model.Gender=="Male" ? new { @checked = "checked" } : null)%>

+0

Dzięki, działa idealnie –

68

Użyj prosty sposób:

<%= Html.RadioButtonFor(m => m.Gender, "Male", new { Checked = "checked" })%> 
+17

Dzięki! Może również być "new {@checked =" checked "}'. – Cymen

+0

To nie będzie działać z potwierdzeniami zwrotnymi –

5

Ten Helper oblicza wyrażenie i jeśli jest równa wartości sprawdza przycisk radiowy i ma te same parametry niż RadioButtonFor (z tego powodu, że nazwa jest zmierzających):

public static MvcHtmlString CheckedRadioButtonFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object value) 
{ 
    return CheckedRadioButtonFor(htmlHelper, expression, value, null); 
} 

public static MvcHtmlString CheckedRadioButtonFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object value, object htmlAttributes) 
{ 
    var func = expression.Compile(); 
    var attributes = new RouteValueDictionary(htmlAttributes); 
    if ((object)func(htmlHelper.ViewData.Model) == value) { 
     attributes["checked"] = "checked"; 
    } 
    return htmlHelper.RadioButtonFor(expression, value, attributes); 
} 

Zastosowanie:

<%= Html.CheckedRadioButtonFor(m => m.Gender, "Male", new { id = "gender-male" })%> 

Wynik:

<!-- For Model.Gender = "Male" --> 
<input checked="checked" id="gender-male" name="Gender" type="radio" value="Male"> 
<!-- For Model.Gender = "Female" --> 
<input id="gender-male" name="Gender" type="radio" value="Male"> 
2

Można również dodawać etykiety, które są powiązane z przycisków radiowych z tym samym identyfikatorem, który następnie umożliwia użytkownikowi kliknij radia przycisk lub etykieta, aby wybrać ten element. Używam tutaj stałych dla "Male", "Female" i "Unknown", ale oczywiście mogą to być ciągi w twoim modelu.

<%: Html.RadioButtonFor(m => m.Gender, "Male", 
    new Dictionary<string, object> { { "checked", "checked" }, { "id", "Male" } }) %> 
<%: Html.Label("Male") %> 

<%: Html.RadioButtonFor(m => m.Gender, "Female", 
    new Dictionary<string, object> { { "id", "Female" } }) %> 
<%: Html.Label("Female")%> 

<%: Html.RadioButtonFor(m => m.Gender, "Unknown", 
    new Dictionary<string, object> { { "id", "Unknown" } }) %> 
<%: Html.Label("Unknown")%> 
+1

Dzięki! miał trudności z utworzeniem etykiety dla tego pola wyboru. Dość oczywiste teraz, ale nie mogłem dojść do tego! – mateuscb

1
<%: Html.RadioButtonFor(m => m.Gender, "Male", new { @checked = true })%> 

lub

@checked = checked 

jeśli lubisz

3

znalazłem inną opcję, dzięki czemu można po prostu użyć @Html.EditorFor() z szablonami:

że mam ten ENUM:

public enum EmailType { Pdf, Html } 

mogę umieścić ten kod w views/Shared/EditorTemplates/EmailType.cshtml

@model EmailType 
@{ 
    var htmlOptions = Model == EmailType.Html ? new { @checked = "checked" } : null; 
    var pdfOptions = Model == EmailType.Pdf ? new { @checked = "checked" } : null; 
} 

@Html.RadioButtonFor(x => x, EmailType.Html, htmlOptions) @EmailType.Html.ToString() 
@Html.RadioButtonFor(x => x, EmailType.Pdf, pdfOptions) @EmailType.Pdf.ToString() 

Teraz można go po prostu użyć, jeśli chcę go użyć w dowolnej chwili:

@Html.EditorFor(x => x.EmailType) 

Jest to w ten sposób dużo bardziej uniwersalne i łatwiejsze do zmiany.

0
  @Html.RadioButton("Insured.GenderType", 1, (Model.Insured.GenderType == 1)) 
      @Web.Mvc.Claims.Resources.PartyResource.MaleLabel 
      @Html.RadioButton("Insured.GenderType", 2, Model.Insured.GenderType == 2) 
      @Web.Mvc.Claims.Resources.PartyResource.FemaleLabel 
0

Oto kod, aby ustawić domyślny przycisk radiowy ustawiony na prawdziwej

@Html.RadioButtonFor(m => m.Gender, "Male", new { @checked = "checked", id = "rdGender", name = "rbGender" }) 
0

Uważam, że najlepiej będzie po prostu umieścić wartość domyślną w metodzie konstruktora modelu.

Gender = "Male"; 
-1

Trzeba dodać 'sprawdzone' htmlAttribute w RadioButtonFor, jeśli wartość Radiobutton pasuje o wartości Model.Gender.

@{ 
     foreach (var item in Model.GenderList) 
     { 
      <div class="btn-group" role="group"> 
       <label class="btn btn-default"> 
        @Html.RadioButtonFor(m => m.Gender, item.Key, (int)Model.Gender==item.Key ? new { @checked = "checked" } : null) 
        @item.Value 
       </label> 
      </div> 
     } 
    } 

Kompletny kod patrz poniżej link: Aby zrenderować grupę przycisków radiowych bootstrap z domyślnym zaznaczeniem. stackoverflow answer link

Powiązane problemy