c# - 使用可为空的枚举属性和具有空字符串值的附加选项呈现单选按钮

标签 c# razor

我试图在必须选择其中一个单选按钮的页面上显示单选按钮,否则应该显示错误。可用的三个选项是:

  • 手册
  • 自动
  • 不确定

添加到 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/

相关文章:

asp.net - 如何用 mvc4 actionlink 列表替换列表

asp.net-mvc - 如何在 mvc4 的 cshtml View 页面中的 html.textboxfor 中设置数字范围验证?

asp.net-mvc - 使用 Razor 的 ASP.NET MVC 部分渲染问题

c# - Linq 左连接多个表

c# - CSV 导出 Response.End 抛出异常

c# - HttpUtility HtmlDecode。为什么我需要这个?

razor - 带有 IEnumerable 模型和输入标签助手的 ASP.NET mvc View

c# - 高级 gif 库

c# - 在非托管异步操作期间保持对象事件

c# - MVC : The parameters dictionary contains a null entry for parameter 'k' of non-nullable type 'System.Int32'