我正在开发一个编辑表单。我需要创建的表单需要是动态的,所以我走上了使用 EditorForModel 的道路,并在后面有许多不同但相似的模型。为了自定义每个字段,我使用 EditorTemplates 进行下拉菜单、复选框和单选按钮等控件。该项目需要尽快交付,我几乎完成了所有工作,但几乎没有做任何事情。
这是我作为 EditorTemplate 的 Sex.cshmt
@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" />
}
我得到了一个属性很少的模型。很简单。Field for Sex 具有 UIHint 注释,以便它可以拾取 Sex 编辑器模板。一些属性也有一些必需的注释。这些工作正常。
我让我的控制器操作返回正确类型的人并使用工厂返回视图。只是一个带有返回正确对象的 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 是一个动态创建的具有属性的对象。它有一个 Sex 属性,它是一个值为“M”或“F”的字符串。我自然知道单选按钮是布尔值,但我必须将 M 或 F 映射到单选按钮。
表格生成得很好。所有普通的文本框都填充了数据。但是没有填充单选按钮和复选框等其他选项。所以,我的问题是,在我的场景中,我如何使用数据预先填充或预先选择单选按钮?