【发布时间】:2015-04-22 06:50:05
【问题描述】:
我想在填写表单字段时启动验证元素。
如果我创建一个包含简单模型的简单 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; }
}
对于这个模型,我为此模型创建了相应的控制器和视图(使用模板编辑的剃刀)。
此时,一切都按原样进行。但仅在单击“保存”按钮(提交表单)时,而不是在填写字段期间。这就是为什么我想在脚本部分实现验证器的 onkeyup 操作:
@section Scripts
{
@Scripts.Render("~/bundles/jqueryval")
<script type="text/javascript">
$('form').validate(
{
onkeyup: function (element)
{
$.validator.unobtrusive.parseElement(element, true);
}
});
</script>
}
但它不起作用,原始验证也不起作用(现在如果我点击保存,表单将提交为有效的 altrough 字段未填写或填写不正确)。
如果我只使用原始验证将不起作用
$('form').validate();
要么
$('form').valid();
命令。
也许有趣的是
$('form').valid();
尽管表单未填写因此无效,但返回 true。
【问题讨论】:
-
可能完全不相关,但“脚本包含”的顺序很重要。一旦我在 jquery.1.0.js 文件之前包含了 jquery.unobtrusive,验证就无法正常工作。
-
首先包含 jquery,然后是 jquery.validation,然后是 _Layout 和 BundleConfig 中声明的 jquery.validation.unobtrusive。没有使用 jquery.ui。
-
浏览器控制台有错误吗?在浏览器中按 F12 并查看是否有任何异常被抛出。此外,请确保您没有禁用不显眼的默认行为。 bartwullems.blogspot.co.uk/2012/03/…
-
当我想尝试调试器时,IE 提示“脚本调试器无法连接到目标进程。已附加调试器。”所以我把 onkeyup 改成: onkeyup: function (element) { console.log("onkeyup", element); //$.validator.unobtrusive.parseElement(element, false); },并且在控制台中我收到了预期的结果(文本“onkeyup”后跟输入元素标签 FirstName 或 LastName),没有任何错误。
-
现在我在浏览器的新实例中打开页面,我可以在没有上述消息的情况下调试代码。我浏览了这两个字段的正常代码。第一个然后第二个。调试器,但这似乎是个好主意...
标签: asp.net asp.net-mvc validation razor unobtrusive-validation