我想使验证元素在填写表单字段期间启动。
如果我创建一个包含简单模型的简单MVC应用程序:
public class SimpleModel
{
[RegularExpression("[A-Z][a-z]+")]
[Required]
public string FirstName { get; set; }
[RegularExpression("[A-Z][a-z]+")]
[Required]
public string LastName { get; set; }
}
对于此模型,我为此模型创建了相应的Controller和View(Razor使用模板Edit)。
此时,一切都按预期进行。但仅在单击“保存”按钮(提交表单)时,而不是在填写字段时。这就是为什么我要在脚本部分中实现验证器的onkeyup动作:
@section Scripts
{
@Scripts.Render("~/bundles/jqueryval")
<script type="text/javascript">
$('form').validate(
{
onkeyup: function (element)
{
$.validator.unobtrusive.parseElement(element, true);
}
});
</script>
}
但这不起作用,并且原始验证也不起作用(现在,如果我单击保存,则表单将作为有效槽口字段未填写或填写不正确而提交)。
如果我仅使用原始验证就行不通
$('form').validate();
要么
$('form').valid();
命令。
也许有趣的是
$('form').valid();
尽管没有填写表格,所以返回true,因此无效。
最佳答案
解决方案很容易。只需意识到,使用脚本进行验证就可以在不打扰的初始化之后进行。通过注册新的jquery ready函数来执行此初始化-在底部的jquery.validate.unobtrusive.js中,您会找到以下代码:
$(function () {
$jQval.unobtrusive.parse(document);
});
因此,如果必须执行附加的初始化,那么它们必须创建自己的ready函数并插入必要的代码。
为了上述问题中提到的目的,您可以使用以下代码:
@section Scripts
{
@Scripts.Render("~/bundles/jqueryval")
<script type="text/javascript">
$(function ()
{
var validator = $('form').validate();
validator.form();
});
</script>
}