问题描述
我的问题如下:
我有一个字段要在其中插入一个正则表达式,并且我必须检查它是否有效(正则表达式[0-9],无效:[])。 在我的页面上,我还有一些其他带有验证规则的字段,例如[Required]或[StringLength],它们在客户端工作,但此字段不起作用。
客户端验证javascript
function validateRegex() {
$.validator.addMethod("validateregex", function (value, element, params) {
var isValid = true;
if (value.length == 0) return true;
try {
var regex = new RegExp(value);
} catch (e) {
isValid = false;
}
console.log(isValid);
return isValid;
});
$.validator.unobtrusive.adapters.add("validateregex", [], function (options) {
options.rules["validateregex"] = true;
options.messages["validateregex"] = options.message;
});
}
在ASP.NET MVC属性中,我有以下内容:
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata,
ControllerContext context)
{
var rule = new ModelClientValidationRule
{
ErrorMessage = "RegEx is not valid", // FormatErrorMessage(metadata.DisplayName),
ValidationType = "validateregex"
};
rule.ValidationParameters.Add("errormessage", rule.ErrorMessage);
yield return rule;
}
如果正则表达式正确/不正确,则返回Isvalid的IsValid方法。
<script type="text/javascript" src="~/Scripts/regexvalidator.js"></script>
<script type="text/javascript">
$(document).ready(function () {
validateRegex();
//$("#saveSettings").on("click", function () {
// $("#optionForm").submit();
//});
});
</script>
在我的.cshtml中,在$(document).ready中,我调用validateRegex函数。 视图中的字段定义为:
<div class="form-group">
@Html.LabelFor(m => m.Regex, new { @class = "control-label" })
<div class="controls">
@Html.TextBoxFor(p => p.Regex, new { @class = "form-control", id = "regexField" })
@Html.ValidationMessageFor(p => p.Regex)
</div>
</div>
HTML视图源:
<div class="controls">
<input type="text" value="" name="Regex" id="regexField" class="form-control">
<span data-valmsg-replace="true" data-valmsg-for="Regex" class="field-validation-valid"></span>
</div>
除此之外,所有其他验证规则均有效。
有人知道为什么吗?
1楼
更改:
<script type="text/javascript">
function validateRegex() {
$.validator.addMethod("validateregex", function (value, element, params) {
var isValid = true;
if (value.length == 0) return true;
try {
var regex = new RegExp(value);
} catch (e) {
isValid = false;
}
console.log(isValid);
return isValid;
});
$.validator.unobtrusive.adapters.add("validateregex", [], function (options) {
options.rules["validateregex"] = true;
options.messages["validateregex"] = options.message;
});
}
$(document).ready(function () {
validateRegex();
});
</script>
至:
<script type="text/javascript">
$.validator.addMethod("validateregex", function (value, element, params) {
var isValid = true;
if (value.length == 0) return true;
try {
var regex = new RegExp(value);
} catch (e) {
isValid = false;
}
console.log(isValid);
return isValid;
});
$.validator.unobtrusive.adapters.add("validateregex", [], function (options) {
options.rules["validateregex"] = options.params;
options.messages["validateregex"] = options.message;
});
</script>
将验证器的注册放在document.ready
或window.load
会导致它们不注册。