我正在开发一个编辑表单。我需要创建的表单需要是动态的,所以我走上了使用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按钮和复选框都没有填充。所以,我的问题是,在我的场景中,如何预先填充或预先选择带数据的单选按钮?
答案 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