【发布时间】:2016-02-14 07:26:24
【问题描述】:
我的模型包含一个枚举,我试图将其绑定到单选按钮列表,以便在提交表单时只能选择一个值。
public enum Options
{
[Display(Name="Option A")
OptionA,
[Display(Name="Option B")
OptionB
}
public class MyModel
{
public Options SelectedOption {get; set;}
public string TextA{get; set;}
public string TextB{get; set;}
}
在 MVC 5 中,我将为每个枚举值呈现一个单选按钮输入,并且用户只能选择一个。因此,每个单选按钮的视图中的代码可能如下所示:
@Html.RadioButtonFor(m => m.SelectedOption, Options.OptionA)
MVC6 的问题似乎是输入标签助手不支持开箱即用的枚举属性。所以如果我尝试添加<input asp-for="SelectedOption"/>,我得到的只是一个文本框。
所以我的问题是,有没有办法使用 MVC6 标签助手(开箱即用或自定义)来做到这一点,还是有其他方法可以做到这一点?也许像使用旧的 razor 语法或者只是添加一个输入标签并填充它的属性?
请注意,理想情况下,两个单选按钮都必须有标签,显示枚举的[Display] 属性中指定的文本。此外,只有一个 TextA 或 TextB 文本框可以同时出现,这应该基于选定的单选按钮,但这超出了问题的范围。所以渲染的标记应该是这样的(或多或少):
<div>
<div>
<input id="OptionA" type="radio" name="SelectedOption"/>
<label for="OptionA">Option A</label>
</div>
<div>
<label for="TextA">Text A</label>
<input type="text" id="TextA" name="TextA">
</div>
<div>
<div>
<div>
<input id="OptionB" type="radio" name="SelectedOption"/>
<label for="OptionB">Option B</label>
</div>
<div>
<label for="TextB">Text A</label>
<input type="text" id="TextB" name="TextB">
</div>
<div>
【问题讨论】:
-
绝对是我的错,我的脑子一直在读下拉而不是单选按钮!我还没有在source code 中看到单选按钮标签助手。不过,可以创建自己的助手。它将获取一个项目列表,如 select 标签助手,您还可以使用
Html.GetEnumSelectList<TEnum>()生成选项列表,这些选项将作为新助手的 asp-items 值提供。 -
不用担心,我也将枚举与下拉菜单关联起来。自定义标签助手听起来是个好主意,但在我的情况下它可能不起作用,因为单个标签和单选按钮之间存在的元素(每个选项切换一个或两个额外的文本框)。我会在星期一试一试,看看我能不能让它工作。如果您愿意,请随时发布答案。
标签: enums radio-button asp.net-core-mvc tag-helpers