I have the following model:
public class Person
{
public string Name { get; set; }
public string Gender { get; set; }
}
I want the default gender to be female, so I set that up in the action:
public ActionResult Create()
{
var model = new Person { Gender = "F" }; // default is female
return View(model);
}
Finally, the view renders everything like this:
@model Person
@using (Html.BeginForm())
{
@Html.EditorForModel()
<p><input type="submit" value="Create" /></p>
}
This all works as expected. Now, let's say that instead of a simple textbox, I want to display the gender as a more intuitive pair of radio buttons. So I make the following template and save it to Shared/EditorTemplates/Gender.cshtml:
@model string
@Html.RadioButtonFor(model => model, "F") Female
@Html.RadioButtonFor(model => model, "M") Male
Finally I decorate Gender with [UIHint("Gender")]
.
Gender is now properly rendered with radio buttons, which is great, BUT...
The problem
Female no longer comes pre selected as the default value and instead I end up with the two radio buttons blank. Am I missing something?
Interestingly, if I move RadioButtonFor
from the template to the view (changing model => model
to model => model.Gender
), then everything works as expected. I know this is a viable workaround, but these templated helpers are such an amazing, addictive convenience that I would rather exhaust all possibilities before letting them go.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…