44

How can i Set RadioButtonFor() as Checked By Default

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

there is way out for (Html.RadioButton) but not for (Html.RadioButtonFor)

any Ideas?

coolguy97
  • 565
  • 1
  • 7
  • 12

14 Answers14

84

Use the simple way:

<%= Html.RadioButtonFor(m => m.Gender, "Male", new { Checked = "checked" })%>
Gabriel Militello
  • 857
  • 1
  • 6
  • 2
  • 21
    Thanks! Can also be `new { @checked = "checked" }`. – Cymen Apr 12 '11 at 21:46
  • 1
    Can I bind Checked property here to Boolean property of a model? such that when i click on it the boolean property turns to true and i can bind that true value to a action method? – NoStressDeveloper Feb 08 '19 at 19:10
16

It's not too pretty, but if you have to implement only very few radio buttons for the entire site, something like this might also be an option:

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

Phil M
  • 975
  • 1
  • 9
  • 13
Adrian Grigore
  • 33,034
  • 36
  • 130
  • 210
14

I assume you should have a group of radio buttons. something could be like

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

You may give the default value for m.Gender = "Unknown" (or something) from your controller.

Allen Wang
  • 978
  • 8
  • 12
  • But i want only two radiobutton with one of them checked bydefault using Html.RadiobuttonFor() – coolguy97 Apr 10 '10 at 09:26
  • 5
    I struggled with this as well, but found this answer is so simple. If you create a property on your model, let's say Gender, in your model's default constructor, just set that property to the default gender, like `Gender = "Male";`. If you do this, mvc.net will automatically select the default and on postback will automatically bind the selected value to your Gender property. – farcrats Jan 31 '12 at 18:17
12

This question on StackOverflow deals with RadioButtonListFor and the answer addresses your question too. You can set the selected property in the RadioButtonListViewModel.

Community
  • 1
  • 1
Mac
  • 2,312
  • 14
  • 25
8

This Helper evaluates the expression and if equals to the value it checks the radio button, and has the same parameters than RadioButtonFor (for this reason the name is diferent):

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);
}

Usage:

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

Result:

<!-- 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">
Bill the Lizard
  • 398,270
  • 210
  • 566
  • 880
Alex LE
  • 20,042
  • 4
  • 30
  • 28
  • You should use the `HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);` instead of the `new RouteValueDictionary(htmlAttributes)` in order to not lose the automatic convertsion of the `data_something` to `data-something` – João Silva Apr 09 '18 at 15:06
3

Came across this and thought I would point out that for MVC 5 all you need to do is set the value on the model. For Example:

Model:

   public class ExampleModel
    {
        public PackingListInputModel()
        {

             RadioButtonField = "One";

        }
        public string RadioButtonField { get; set; }
    }

View :

@model ExampleModel

@using (Html.BeginForm)
{
    @Html.RadioButtonFor(m => m.RadioButtonField , "One")
    @Html.RadioButtonFor(m => m.RadioButtonField , "Two")
}

The state of the first radio button ("One") will be set as active because the value matches what was set in the model.

Jon Ryan
  • 1,497
  • 1
  • 13
  • 29
3

I found another option so you can just use @Html.EditorFor() with templates:

Say I have this enum:

public enum EmailType { Pdf, Html }

I can put this code in 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()

Now I can simply use this if I want to use it at any time:

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

It's much more universal this way, and easier to change I feel.

naspinski
  • 34,020
  • 36
  • 111
  • 167
2

You can also add labels that are tied to your radio buttons with the same ID, which then allows the user to click the radio button or label to select that item. I'm using constants here for "Male", "Female" and "Unknown", but obviously these could be strings in your model.

<%: 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")%>
nekno
  • 19,177
  • 5
  • 42
  • 47
  • 1
    Thanks! was having difficulty in creating the label for the checkbox. Quite obvious now, but could not figure out! – mateuscb Oct 04 '11 at 20:23
1
<%: Html.RadioButtonFor(m => m.Gender, "Male", new { @checked = true } )%>

or

@checked = checked

if you like

Dustin Laine
  • 37,935
  • 10
  • 86
  • 125
0

If you're using jquery, you can call this right before your radio buttons.

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

^ This will check the first radio box, but you can look at more jquery to cycle through to the one you want selected.

rrp6119
  • 1
  • 1
0

Here is code to set default radio button set to true

@Html.RadioButtonFor(m => m.Gender, "Male", new { @checked = "checked", id = "rdGender", name = "rbGender" })
Anjan Kant
  • 4,090
  • 41
  • 39
0

I find it best to just put the default value in the constructor method of the model.

Gender = "Male";
dko
  • 698
  • 1
  • 6
  • 18
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
Kuttan Sujith
  • 7,889
  • 18
  • 64
  • 95
-1

You need to add 'checked' htmlAttribute in RadioButtonFor, if the radiobutton's value matches with Model.Gender value.

@{
        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>
        }
    }

For complete code see below link: To render bootstrap radio button group with default checked. stackoverflow answer link

Community
  • 1
  • 1
Himalaya Garg
  • 1,525
  • 18
  • 23