ASP.NET Core MVC中的客户端验证

Pun*_*ter 5 validation jquery client attributes asp.net-core

我无法让客户端验证在ASP.NET Core MVC中工作。我从这里Google搜索并应用了示例(http://www.discuzfeed.com/code/lotooslo-mvc-6-client-side-validation-for-custom-attribute.html),但是没有运气。

这是我的代码

属性

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public sealed class CannotBeRedAttribute : ValidationAttribute, IClientModelValidator
{  
    public override bool IsValid(object value)
    {
        var message = value as string;
        return false;
        //return message?.ToLower() == "red";
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(
        ClientModelValidationContext context)
    { 
        yield return new ModelClientValidationRule(
            "cannotbered",
            FormatErrorMessage(ErrorMessage));
    }
}
Run Code Online (Sandbox Code Playgroud)

查看模型

    [CannotBeRed(ErrorMessage = "Not red!")]
    public string SelectedCompanyIds { get; set; }
Run Code Online (Sandbox Code Playgroud)

视图

<input type="hidden" name="test" class="form-control"     id="selectCompanyIdControl" data-bind="value: SelectedReportCompanyIds" asp-    for="SelectedCompanyIds" />

 @<script type="text/javascript">
    require(['jquery', 'knockout-es5', 'jquery-validation', 'jquery-validation-unobtrusive', 'pubsubjs', 'ReportEditViewModel'], function(jquery, knockout, jQueryVal, jQueryValUnobtrusive, pubsub, vm) {


        jquery(document).ready(function () {  

            jquery.validator.addMethod("cannotbered",
                function (value, element, parameters) {
                    alert("READ");
                    return value.toLowerCase() !== "red";
                });

            jquery.validator.unobtrusive.adapters.add('cannotbered', [], function (options) {
                alert("ADAPATER");
                options.rules.cannotbered = {};
                options.messages['cannotbered'] = options.message;
            });
Run Code Online (Sandbox Code Playgroud)

忽略括号在视图中未正确关闭的事实,还有其他与剔除相关的JS部件,此处没有复制不相关。

GetClientValidationRules方法已被命中,但JS中的警报未找到。仅作为参考,在chrome或IE中运行开发人员工具时,我可以看到已加载了jquery验证和不干扰的库,并且没有控制台错误。验证标签在输入框上似乎没问题。...

<input type="hidden" name="test" class="form-control" id="selectCompanyIdControl" data-bind="value: SelectedReportCompanyIds" data-val="true" data-val-cannotbered="Not red!" value="" />
Run Code Online (Sandbox Code Playgroud)

所以我想我只是想走了一步,但不知道可能会是什么。有指针吗?