gpt4 book ai didi

asp.net-mvc - 如何使RequiredAttribute与枚举字段一起使用

转载 作者:行者123 更新时间:2023-12-04 22:31:02 24 4
gpt4 key购买 nike

我最近意识到,RequiredAttribute在枚举字段上不起作用。假设我在HtmlHelper方法的帮助下呈现的表单上有两个选择元素ddlOfficers和ddlApplicationTypes。创建ddlOfficers的帮助程序方法如下:

 @Html.DropDownListFor(x => x.OfficerID, Model.Officers, "<Choose>", new { id = "ddlAddressedOfficer" })

其中OfficerID是 Nullable<int>
对于ddlApplicationTypes,我必须编写一个扩展方法,该方法可以让我为枚举字段创建dropdownlist:
 @Html.EnumDropDownListFor(x => x.ApplicationType, new { @class = "select-normal" })

其中ApplicationType是称为AppType的自定义枚举类型
  public Enum AppType{
None=0,
Complaint,
Query,
Suggestion
}

我已经用RequiredAttribute装饰了OfficerID和ApplicationType属性。当我在ddlOfficers上没有选择任何内容时,我将收到有关提交的验证警告。但是,如果我未在ddlApplicationType上选择任何内容,则不会收到任何警告。我可能知道问题的原因:如果比较两个select元素,我会看到ddlOfficers的第一个选项(选择)没有指定值,选择该值会导致验证失败。但是ddlApplicationType的第一个选项的值为“None”。因此,验证引擎会看到所选选项具有一个值,而只是将其忽略。您建议采取什么措施使其正常工作?

编辑:使事情更清楚地看到这里是两个选择元素的html:
<select class="select-normal input-validation-error" data-val="true"  data-val-required="Choose the addressed officer" id="ddlOfficers" name="OfficerID">
<option value="">&lt;Choose&gt;</option>
<option value="1">Ben Martin</option>
<option value="2">Nick Carter</option>
<option value="3">Sebastian Van</option>
</select>

<select class="select-normal valid" data-val="true" data-val-required="Select the application type" id="ddlApplicationType" name="ApplicationType">
<option selected="selected" value="None">&lt;Choose&gt;</option>
<option value="Complaint">Complaint</option>
<option value="Query">Query</option>
<option value="Suggestion">Suggestion</option>
</select>

最佳答案

您的自定义帮助程序没有任何问题。 HTML清楚地表明已添加了所需的数据验证(data-val-required)。简而言之,问题在于您的枚举始终具有可接受的值(value)。您可能不认为None可以接受,但是从枚举的角度来看,这很好。因此,您有两种选择:

  • 添加您自己的自定义验证,以确保未选择None。您需要同时处理客户端和服务器端,因为您在这里完全是一个人。
  • 如果可以更改枚举,则可以删除None选项,然后在模型/ View 模型属性上简单地使用可为空的枚举,即:
    public AppType? ApplicationType { get; set; }

    然后,所需的验证将按预期工作。
  • 关于asp.net-mvc - 如何使RequiredAttribute与枚举字段一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25548796/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com