任何人?还有另一个问题,但唯一的答案是编写一些javascript验证,它也拒绝在我的局部视图上工作(“$未定义”)。
无论如何,我不想使用javascript我只想简单验证不能留空的必填字段,需要整数的数字字段等。
有人能否对验证和部分观点有所了解?
答案 0 :(得分:4)
我怀疑您正在使用AJAX加载这些部分视图。如果是这种情况,则需要在将部分的新内容注入DOM后手动调用$.validator.unobtrusive.parse
方法,如this article中所述。
不显眼的客户端验证脚本会自动解析 页面完成后验证规则的初始HTML集 加载。如果您的页面动态添加新的HTML内容(也许 您可能希望通过Ajax或客户端应用程序代码) 解析新的HTML以便在新的HTML元素上进行客户端验证。
要解析新的HTML,您可以调用 jQuery.validator.unobtrusive.parse()方法,传递给它一个选择器 您想要解析的HTML。你也可以打电话给 jQuery.validator.unobtrusive.parseElement()函数解析单个 HTML元素。
就 $未定义错误而言,您应确保已包含正确的脚本:
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
还要确保您没有引用任何Microsoft * .js脚本。它们已过时,不应再在ASP.NET MVC 3中使用。
当然这只是一个假设,你没有显示任何代码,所以我们无法知道你在做什么。
答案 1 :(得分:0)
我遇到了同样的问题,我发现两次在同一个表单上调用$ .validator.unobtrusive.parse()是不可能的。 最初从服务器加载表单时,表单由不显眼的库自动解析。当您将一个输入元素动态添加到窗体并再次调用$ .validator.unobtrusive.parse()时,它将无法正常工作。 parseElement()也是如此。
因此,在调用$ .validator.unobtrusive.parse之前,请从表单中删除原始验证器和不显眼的验证,如下所示:
success: function (html) {
$("#div-id").append(html);
var form = $("#div-id").closest("form");
form.removeData('validator');
form.removeData('unobtrusiveValidation');
$.validator.unobtrusive.parse($("#editorRows"));
}