我正在尝试在页面上显示单选按钮,其中必须选择其中一个单选按钮,否则应显示错误。可用的三个选项是:
选择“Unsure”没有意义添加到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属性为null,表示选择了“Unsure”选项
实际发生的是模型视图状态无效且验证消息“请选择要学习的首选变速箱传输”。由于GearboxTransmission属性上的必需属性而出现。
我希望你必须指定一个选项,如果你不这样做,你会收到错误“请选择首选的变速箱传输来学习”。除非您选择“不确定”单选按钮,否则表单将被提交。
答案 0 :(得分:2)
你的代码似乎并不是错的,尽管如果不运行它我就无法说出来。此外,您还知道这有什么问题 - 您的验证需要&#39;有一个选择。
&#39;必需&#39;并没有真正检查单击单选按钮,而是检查用户是否选择了一个值。
显然,当您的某个选项的值为空(您关注?)时,您无法使用验证来显示基于未选择值的错误消息。
有2个答案:
A)忘记错误信息,并将无线电默认为“不确定”&#39;虽然这可能会降低数据捕获的质量。 B)使用“不确定”的实际值,将其添加到GearboxTransmission枚举并通过模型和视图等流动。这将允许您的空选择工作。
如果你真的必须在没有&#39; Unsure&#39;的情况下得到枚举值,请使用第二个进行模型绑定,但将模型枚举复制到控制器中的DB Enum。
希望这有帮助。