不确定我是否要采用正确的方法。
我试图在遵循某些业务规则的模型上对PersonalID字段进行验证。
业务规则方法将PersonalID作为字符串,并通过一些预定的检查并返回bool。
我创建了一个PersonalIdValidationAttribute,它继承了ValidationAttribute和IClientValidatable。 IsValid方法调用业务规则以确定PersonalID是否确实有效。
这一切似乎都按预期进行。如果我转向客户端验证,则POST上的模型验证将按预期进行。
GetClientValidationRules似乎也可以正常工作。这是代码:
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var rule = new ModelClientValidationRule()
{
// Test Error Message
ErrorMessage = "An Error",
ValidationType = "personalidvalidation"
};
yield return rule;
}
它也在创建带有data-val的输入字段,就像我期望的那样:
<input class="input valid" data-val="true" data-val-length="Rajoitus 30 merkkiä" data-val-length-max="11" data-val-personalidvalidation="An Error" data-val-required="Henkilötunnus on pakollinen" id="PolicyHolder_PersonalID" name="PolicyHolder.PersonalID" type="text" value="">
现在我不确定是否可以这样做。在脚本文件中,我要添加客户端验证:
$.validator.addMethod("personalidvalidation", function (value, element, params) {
var record = { personalID: value };
return $.ajax({
url: "PersonalIdValidation",
data: JSON.stringify(record),
type: 'POST',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
success: function (response) {
if (response.success) {
console.log('success');
return true;
} else {
console.log('fail');
return false;
}
},
error: function () {
return false;
}
});
});
$.validator.unobtrusive.adapters.add("personalidvalidation", function (options) {
options.rules["personalidvalidation"] = options.params;
options.messages["personalidvalidation"] = options.message;
});
查看开发者控制台中的“网络”选项卡,显示正在调用控制器方法,但从未正确显示验证消息。控制台中会显示成功和失败消息。
如何使用业务逻辑调用控制器以对PersonalID进行客户端验证?
谢谢。