MVC客户端验证器 - 将布尔值作为字符串传递

时间:2017-06-20 01:49:48

标签: asp.net-mvc unobtrusive-validation client-side-validation

我正在尝试从验证器的'GetClientValidationRules'方法传递一个布尔参数。 但是参数以字符串形式出现。 是否可以将参数作为实际布尔值传递?

参考代码:

服务器端:

public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
{
    var rule = new ModelClientValidationRule()
    {
        ErrorMessage = "This is an error."
        ValidationType = "test"
    }
    rule.ValidationParameters.Add("test", true);
    yield return rule;
}

客户端:

$.validator.unobtrusive.adapters.add("test", ["test"], function(options) {
    var parameter = options.params.test;

    if (parameter) { // Always true, because parameter === "True" (string value)
        ...
    }
});

我知道我可以使用'if(参数===“True”)'但是如果可能的话,我希望避免这样做。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

不幸的是,所有值都以字符串形式传递,因此您必须在那里解析它。

但是,您可以将其作为布尔值传递给验证方法:

$.validator.unobtrusive.adapters.add("test", ["test"], function (options) {
    var parameter = options.params.test;

    options.rules["myMethod"] = parameter.toLowerCase() === "true";
    // add other options, such as the validation message
});

$.validator.addMethod("myMethod", function (value, element, params) {
    // 'params' would be the boolean value 'true'
});

答案 1 :(得分:1)

默认的布尔解析方法(如!!(parameter)Boolean(parameter))可能无法在此处正常工作,因为如果true包含任何类型的字符串,它始终返回parameter,因此您需要附加函数返回Boolean以正确解析它:

function parseBoolean(value) {
    // return value.toString().toLowerCase() === "true" also work here
    return String(value).toLowerCase() === "true";
}

然后,Will Ray的代码应该被修改为使用下面显示的函数:

$.validator.unobtrusive.adapters.add("test", ["test"], function (options) {
    var parameter = options.params.test;

    // parse as boolean value here
    options.rules["myMethod"] = parseBoolean(parameter);

    // add other options, such as the validation message
});

$.validator.addMethod("myMethod", function (value, element, params) {
    // 'params' would be the boolean value 'true'
});