我试图在必须选择其中一个单选按钮的页面上显示单选按钮,否则应该显示错误。可用的三个选项是:
- 手册
- 自动
- 不确定
添加到 GearboxTransmission 枚举中的“不确定”选项没有意义,因为它只是表明用户此时不知道他们想要选择什么选项。
我有以下枚举:
public enum GearboxTransmission
{
Automatic,
SemiAutomatic,
Manual
}
型号:
public class BookingsIndexViewModel
{
[Required(ErrorMessage = "Please select the preferred gearbox transmission to learn with.")]
public GearboxTransmission? GearboxTransmission { get; set; }
}
和 HTML:
<div class="form-group">
<fieldset>
<legend>Gearbox transmission</legend>
<div class="radio">
<label>
@Html.RadioButtonFor(m => m.GearboxTransmission, GearboxTransmission.Manual) Manual
</label>
</div>
<div class="radio">
<label>
@Html.RadioButtonFor(m => m.GearboxTransmission, GearboxTransmission.Automatic) Automatic
</label>
</div>
<div class="radio">
<label>
@Html.RadioButtonFor(m => m.GearboxTransmission, string.Empty) Unsure
</label>
</div>
@Html.ValidationMessageFor(m => m.GearboxTransmission, null, new { @class = "text-danger" })
</fieldset>
</div>
由于我已将 GearboxTransmission 属性设置为可为空,因此我希望通过创建一个值为空字符串的单选按钮,当页面回发时,GearboxTransmission 属性将为空,表明已选择选项“Unsure” .
实际发生的是模型 View 状态无效和验证消息“请选择要学习的首选变速箱”。由于 GearboxTransmission 属性上的必需属性而出现。
我希望你必须指定一个选项,如果你不指定,你会收到错误消息“请选择首选的变速箱传动装置进行学习。”除非您选择“不确定”单选按钮,在这种情况下会提交表单。
最佳答案
你的代码本身似乎并没有错,尽管我不运行它就无法分辨。此外,您还知道这有什么问题 - 您的验证“需要”做出选择。
'Required' 并不真正检查单选按钮是否被单击,而是检查用户是否选择了一个值。
显然,当您的其中一个选项的值为空时(您明白吗?),您不能使用验证来显示基于未选择值的错误消息。
对此有 2 个答案:
A) 忘记错误消息并将 radio 默认为“不确定”,尽管这可能会大大降低数据捕获的质量。 B) 为“不确定”使用实际值,将其添加到您的 GearboxTransmission 枚举中,并使其流过模型和 View 等。这将使您的空选择起作用。
如果您真的必须以没有“不确定”的枚举值结束,请使用第二个用于模型绑定(bind),但将模型枚举复制到 Controller 中的数据库枚举。
希望这对您有所帮助。
关于c# - 使用可为空的枚举属性和具有空字符串值的附加选项呈现单选按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33066619/