为什么表单验证在MVC3部分视图中不起作用?

时间:2011-11-09 11:53:10

标签: asp.net-mvc-3 validation view partial

任何人?还有另一个问题,但唯一的答案是编写一些javascript验证,它也拒绝在我的局部视图上工作(“$未定义”)。

无论如何,我不想使用javascript我只想简单验证不能留空的必填字段,需要整数的数字字段等。

有人能否对验证和部分观点有所了解?

2 个答案:

答案 0 :(得分:4)

我怀疑您正在使用AJAX加载这些部分视图。如果是这种情况,则需要在将部分的新内容注入DOM后手动调用$.validator.unobtrusive.parse方法,如this article中所述。

布拉德威尔逊也在他的blog post中讨论过这个问题:

  

不显眼的客户端验证脚本会自动解析   页面完成后验证规则的初始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"));
                    }