【问题标题】:How to preselect radio-buttons with EditorTemplate in MVC?如何在 MVC 中使用 EditorTemplate 预选单选按钮?
【发布时间】:2014-10-13 20:15:15
【问题描述】:

我正在开发一个编辑表单。我需要创建的表单需要是动态的,所以我走上了使用 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 映射到单选按钮。

表单生成良好。所有普通的文本框都填充了数据。但是没有填充单选按钮和复选框等其他选项。所以,我的问题是,在我的场景中,如何使用数据预填充或预选单选按钮?

【问题讨论】:

  • 我想你的答案可能在这里:stackoverflow.com/questions/18852821/…
  • @OualidKTATA 感谢您的帮助,但答案不使用 EditorTempates .. 不使用 EditorTempate 它对我有用,但我的代码中需要 EditorTemplate。

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


【解决方案1】:

你应该使用 html 属性:

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

【讨论】:

  • 感谢 Oualid。由于我的 RadioButtonFor 在 EditorTemplate 中,我不能做模型 => model.Sex。它会给我编译时错误,因为模板中没有模型。正如斯蒂芬建议的那样,我可以在主视图上使用您的代码或类似的代码,它可以按预期工作,但我必须让这个 EditorTemplate 工作。
  • 您可能需要访问元数据以获取您注释的属性名称。如果您需要帮助,请告诉我。
  • 是的 .. 我在运行时使用 DataAnnotationsModelMetadataProvider 并覆盖 CreateMetaData 方法放置注释。是你在说的吗?我没有提到这一点,因为我想保持问题简单。但我认为这不是问题所在。我认为我需要在编辑器模板上添加一些东西来预选值。但我不知道我需要什么。谢谢。
  • 我的意思是不要使用非通用的 Model.Sex 尝试从 ViewData.ModelMetadata.Properties 集合中获取属性名称并使用它。
  • 哦,我明白了.. 不.. 我不知道如何从 ViewData.ModelMetadata 中获取值。你能解释一下吗?谢谢
猜你喜欢
  • 2012-04-15
  • 2013-09-18
  • 2015-03-04
  • 2015-05-12
  • 1970-01-01
  • 2015-08-18
  • 2018-06-11
  • 2018-10-24
  • 2013-08-07
相关资源
最近更新 更多