【问题标题】:JQuery custom validation attribute MVC coreJQuery自定义验证属性MVC核心
【发布时间】:2017-12-16 23:15:09
【问题描述】:

我尝试添加自定义属性来验证必填字段并修剪空白值。

所以这是我的自定义属性:

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
public class CustomRequired : ValidationAttribute, IClientModelValidator
{
    public CustomRequired()
    {
        ErrorMessage = new ResourceManager(typeof(ErrorResource)).GetString("All_Required");
    }

    public void AddValidation(ClientModelValidationContext context)
    {
        if (context == null)
            throw new ArgumentNullException(nameof(context));

        MergeAttribute(context.Attributes, "data-val", "true");
        MergeAttribute(context.Attributes, "data-val-customrequired", ErrorMessage);
    }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        return value.ToString().Trim().Length > 0 ? ValidationResult.Success : new ValidationResult(ErrorMessage);
    }

    private static bool MergeAttribute(IDictionary<string, string> attributes, string key, string value)
    {
        if (attributes.ContainsKey(key))
        {
            return false;
        }
        attributes.Add(key, value);
        return true;
    }
}

以及我如何添加它(或尝试):

$(document).ready(function () {
    $.validator.addMethod("customrequired", function (value, element, parameters) {
        return $.trim(value).length > 0;
    });
    $.validator.unobtrusive.adapters.addBool('customrequired');
});

并将其设置在视图模型中的属性上:

[CustomRequired]
public string Code { get; set; }

我的问题是它没有任何客户端验证,而函数在 jQuery 验证器中... ModelState 无效,因此控制器拒绝它,但我想要客户端验证。

控制台:

编辑:

我忘了说我正在使用剑道...请参阅下面我自己的答案。

【问题讨论】:

    标签: asp.net-core-mvc kendo-asp.net-mvc unobtrusive-validation validationattribute


    【解决方案1】:

    我忘了说我正在使用剑道...

    我的代码可以通过经典验证运行,但不能通过 kendo 编辑弹出窗口运行。 :/

    所以这里是那些有同样问题的人的解决方案,把它写在你的javascript中而不是添加到$.validator

    (function ($, kendo) {
        $.extend(true, kendo.ui.validator, {
            rules: {
                customrequired: function (input) {
                    if (input.is("[data-val-customrequired]")) {
                        return $.trim(input.val()).length > 0;
                    }
                    return true;
                }
            },
            messages: {
                customrequired: function (input) {
                    return input.attr("data-val-customrequired");
                }
            }
        });
    })(jQuery, kendo);
    

    【讨论】:

    • 您应该编辑您的 OP 以包含剑道信息。让事情在这里变得更有意义。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    相关资源
    最近更新 更多