客户端验证不会针对 RequiredIf 触发

本文关键字:RequiredIf 触发 验证 客户端 | 更新日期: 2023-09-27 18:34:30

我正在使用JaroslawWaliszko的ExpressiveAnnotations。当我通过ModelState.IsValid检查服务器端时,它工作正常。但它不显示客户端验证消息。我不知道缺少什么东西。我也添加了jquery文件。这是我RequiredIf应用的属性:

// When Role = Assistant Professor(which has id = 3), 
// His/ Her head's Id should be selected as ParentID.
[RequiredIf("RoleID == 3", ErrorMessage = "Select Head.")] 
public Nullable<int> ParentID { get; set; }

呈现的 HTML 如下所示:

<select class="form-control ng-pristine ng-valid" 
        data-val="true" 
        data-val-number="The field ParentID must be a number." 
        data-val-requiredif="Select Head." 
        data-val-requiredif-allowempty="false" 
        data-val-requiredif-constsmap="{}" 
        data-val-requiredif-expression="RoleID == 3" 
        data-val-requiredif-fieldsmap="{"RoleID":"numeric"}" 
        id="ParentID" 
        name="ParentID" 
        ng-model="DTO.ParentID" 
        ng-options="obj.Value as obj.Text for obj in headList">
    <option selected="selected" value="" class="">--select--</option>
    <option value="0">Mr. Kevin Thomas</option>
    <option value="1">Ms. Lisa Brown</option>
    <option value="2">Mr. Sail Kapoor</option>
</select>

我已经实现的事情:

  1. 已安装的软件包:安装包表达性注释
  2. Global.asax 中添加了以下代码

    DataAnnotationsModelValidatorProvider.RegisterAdapter(
        typeof (RequiredIfAttribute), typeof (RequiredIfValidator));
    DataAnnotationsModelValidatorProvider.RegisterAdapter(
        typeof (AssertThatAttribute), typeof (AssertThatValidator));
    
  3. jquery 验证文件下面的捆绑包中添加了 expressive.annotations.validate.js,并在指定页面上添加了捆绑包。

客户端验证不会针对 RequiredIf 触发

对我来说看起来

还不错。控制台输出是否有任何错误?

你可以试试这个对我有用的:

public class Model
{
    public IEnumerable<SelectListItem> Supervisors
    {
        get
        {
            return new[]
            {
                new SelectListItem {Text = "Mr. Kevin Thomas", Value = "0"},
                new SelectListItem {Text = "Ms. Lisa Brown", Value = "1"},
                new SelectListItem {Text = "Mr. Sail Kapoor", Value = "2"}
            };
        }
    }
    [RequiredIf("RoleID == 3", ErrorMessage = "Select Head.")]
    public int? ParentID { get; set; }
    ...

并查看:

@Html.DropDownListFor(model => model.ParentID, Model.Supervisors, "--select--")
@Html.ValidationMessageFor(model => model.ParentID)

此外,除非您已经看到它,否则请查看示例项目,您可以在其中找到一些类似的案例。

更新:

在此处查看一些故障排除步骤。