我正在尝试从验证器的'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”)'但是如果可能的话,我希望避免这样做。
非常感谢任何帮助。
答案 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'
});