RadioButton不在编辑器模板中选择值

Dan*_*zzi 5 asp.net-mvc asp.net-mvc-3

我有以下型号:

public class Person
{
    public string Name { get; set; }
    public string Gender { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我希望默认的性别为女性,所以我在动作中设置了:

public ActionResult Create()
{
    var model = new Person { Gender = "F" }; // default is female
    return View(model);
}
Run Code Online (Sandbox Code Playgroud)

最后,视图呈现如下所示:

@model Person

@using (Html.BeginForm())
{
    @Html.EditorForModel()
    <p><input type="submit" value="Create" /></p>
}
Run Code Online (Sandbox Code Playgroud)

这一切都按预期工作.现在,让我们说,而不是简单的文本框,我想将性别显示为一组更直观的单选按钮.所以我制作了以下模板并将其保存到Shared/EditorTemplates/Gender.cshtml:

@model string
@Html.RadioButtonFor(model => model, "F") Female
@Html.RadioButtonFor(model => model, "M") Male
Run Code Online (Sandbox Code Playgroud)

最后,我装饰了性别[UIHint("Gender")].

现在通过单选按钮正确呈现性别,这很棒,但是...

问题

女性不再预先选择作为默认值,而是最终将两个单选按钮留空.我错过了什么吗?

有趣的是,如果我RadioButtonFor从模板移动到视图(更改model => modelmodel => model.Gender),那么一切都按预期工作.我知道这是一个可行的解决方法,但这些模板化的助手是如此惊人,令人上瘾的便利,我宁愿在让他们离开之前用尽所有可能性.

Dar*_*rov 9

我知道这很丑,但以下可能有效:

@model string
@Html.RadioButton("", "F", Model == "F") Female
@Html.RadioButton("", "M", Model == "M") Male
Run Code Online (Sandbox Code Playgroud)

RadioButton帮助程序的问题是,如果第一个参数为null或为空,它将始终将其视为未检查,从而使此帮助程序不适合编辑器模板.

这是MVC源代码的摘录,说明了我的意思:

bool isChecked = !string.IsNullOrEmpty(name) && string.Equals(htmlHelper.EvalString(name), b, StringComparison.OrdinalIgnoreCase);
Run Code Online (Sandbox Code Playgroud)

作为替代方案,您可以使用自定义HTML帮助程序生成单选按钮列表.