如何在MVC中使用EditorTemplate预选单选按钮?

时间:2014-08-20 12:53:27

标签: asp.net-mvc radio-button data-annotations mvc-editor-templates editorformodel

我正在开发一个编辑表单。我需要创建的表单需要是动态的,所以我走上了使用EditorForModel的道路,后面有许多不同但相似的模型。为了自定义每个字段,我使用EditorTemplates进行控制,如下拉列表,复选框和单选按钮。该项目需要尽快交付,我几乎完成了所有事情,但几乎没有。

这是我的Sex.cshmt作为EditorTemplate

@Html.RadioButton("", "M") Male
@Html.RadioButton("", "F") Female

编辑视图也没有那么多。

@using (Html.BeginForm("Edit", "Editor", FormMethod.Post))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)              

    @Html.HiddenFor(m => m.Id)       

    @Html.EditorForModel()    
    <input type="submit" class="btn btn-default" value="Save" />      
}

我得到了一个属性很少的模型。非常简单。 Sex for Sex具有UIHint注释,因此它可以获取性别编辑器模板。某些属性也有一些必需的注释。这些工作正常。

我得到了我的控制器动作以返回正确类型的人并使用工厂返回视图。只是一个带有switch语句的标准工厂,它返回正确的对象。

public ActionResult Edit(int p)
    {
        var person= _service.personService.Get(p);            

        var canFac = new CandidateFactory(type);
        var res = canFac.CreateObject(person);

        return PartialView("_Edit", res);
    }

在上面的代码中,res是一个带有属性的动态创建对象。它有性别的属性,它是一个价值为&#39; M&#39;或者&#39; F&#39;。我知道自然单选按钮是bool但我必须将M或F映射到单选按钮。

表单生成正常。所有普通文本框都填充了数据。但其他人如Radio按钮和复选框都没有填充。所以,我的问题是,在我的场景中,如何预先填充或预先选择带数据的单选按钮?

1 个答案:

答案 0 :(得分:2)

您应该使用html属性:

@Html.RadioButton("M","M", Model == "M" ? new { Checked = "checked" } : null) Male
@Html.RadioButton("F","F,", Model == "F" ? new { Checked = "checked" } : null) Female