MVC 客户端验证器 - 将布尔值作为字符串传递
MVC Client Side Validator - passes boolean as a string
我正在尝试从验证器的 '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 (parameter === "True")' 但我想尽可能避免这样做。
如有任何帮助,我们将不胜感激。
不幸的是,所有值都作为字符串传递,因此您必须在那里解析它。
但是,您可以将其作为布尔值传递给验证方法:
$.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'
});
像 !!(parameter)
或 Boolean(parameter)
这样的默认布尔解析方法在这里可能无法正常工作,因为它总是 returns 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'
});
我正在尝试从验证器的 '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 (parameter === "True")' 但我想尽可能避免这样做。
如有任何帮助,我们将不胜感激。
不幸的是,所有值都作为字符串传递,因此您必须在那里解析它。
但是,您可以将其作为布尔值传递给验证方法:
$.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'
});
像 !!(parameter)
或 Boolean(parameter)
这样的默认布尔解析方法在这里可能无法正常工作,因为它总是 returns 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'
});