Asp.net core mvc

jquery.validation.unobtrusive添加自

2019-03-13  本文已影响2人  firechun

jquery.validation.unobtrusive.js是微软ASP.NET Core MVC(以及ASP.NET MVC)自带的快速使用jquery.validation的js框架,配合ASP.NET客户端语法,使用更加方便。

我的页面上有两个select,如果TypeId选择了第一个选项(value=1),则PartnerId可以选择任何选项,否则PartnerId必须选择第一个选项之外的选项。

<select asp-for="TypeId" asp-items="ViewBag.UserTypeList" class="form-control"></select>
<select  asp-for="PartnerId" asp-items="ViewBag.PartnerList" class="form-control"></select>
<span asp-validation-for="PartnerId" class="text-danger"></span>

显然这个验证规则只能使用自定义验证规则来实现。

在项目中创建一个validator-additional-method.js文件,先编写jquery.validation的addMethod方法添加自定义验证规则:

$.validator.addMethod('partner', function (value, element, params) {
    if ($('#TypeId').val() == 1) {
        return true;
    }
    return value != 0;
});

我把这个验证规则称为partner,因此addMethod方法的第一个参数是'partner',第二个参数是验证规则的回调函数,在这个函数中,我们判断$('TypeId')的值,当它为1时,返回true,表示名为TypeId的select选择value=1的选项时,验证无条件通过。回调函数的第一个参数value是我们要验证的控件的值,这里就是PartnerId的值,因为当TypeId不为1时,PartnerId不能是第一个选项(value=0),因此函数返回value!=0,做为验证结果。

接下来添加jquery.validation.unobtrusive适配器:

$.validator.unobtrusive.adapters.add('partner',  function (options) {
    options.rules["partner"] = { };
    options.messages["partner"] = options.message;
});

方法的第一个参数是验证规则名称,必须前面addMethod方法的第一个参数相同,第二个是回调函数,用来传递自定义验证规则的相关数据,实际上,当页面加载上,这个方法的回调函数会被首先执行,以获取自定义验证规则的必要信息。
最后为控件添加jquery.validation.unobtrusive的验证规则data-val-partner="需要指定合伙人"

<select asp-for="PartnerId" data-val="true" data-val-partner="需要指定合伙人" asp-items="ViewBag.PartnerList" class="form-control"></select>
<span asp-validation-for="PartnerId" class="text-danger"></span>

在addMethod方法中,我们使用硬编码来判定TypeId的值,显然不合适,可以把select的id做为参数传递给自定义验证函数。

修改jquery.validation.unobtrusive适配器方法:

$.validator.unobtrusive.adapters.add('partner',  ['args'],  function (options) {
    options.rules["partner"] = {
         args: options.params.args  
    };
    options.messages["partner"] = options.message;
});

添加了第二个参数:['args'],并且在函数中把它传递给了验证对象。
把addMethod方法修改为:

$.validator.addMethod('partner', function (value, element, params) {
    if ($(params.args).val() == 1) {
        return true;
    }
    return value != 0;
});

注意参数的名称要和jquery.validation.unobtrusive适配器方法中的名称一致。
在要验证的控件中添加参数data-val-partner-args="#TypeId"

<select data-val="true" asp-for="PartnerId" data-val="true" data-val-partner="需要指定合伙人"  data-val-partner-args="#TypeId" asp-items="ViewBag.PartnerList" class="form-control"></select>
<span asp-validation-for="PartnerId" class="text-danger"></span>
上一篇 下一篇

猜你喜欢

热点阅读