JQuery 自定义验证属性 MVC 核心
JQuery custom validation attribute MVC core
我尝试添加一个自定义属性来验证必填字段和 trim 白色值 space。
这是我的自定义属性:
[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 无效,因此控制器拒绝它,但我想要客户端验证。
控制台:
编辑:
我忘了说我正在使用 kendo...请参阅下面我自己的回答。
我忘了说我正在使用 kendo...
我的代码可以使用经典验证,但不能使用 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);
我尝试添加一个自定义属性来验证必填字段和 trim 白色值 space。
这是我的自定义属性:
[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 无效,因此控制器拒绝它,但我想要客户端验证。
控制台:
编辑:
我忘了说我正在使用 kendo...请参阅下面我自己的回答。
我忘了说我正在使用 kendo...
我的代码可以使用经典验证,但不能使用 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);