2011-11-09 67 views
0

有人吗?还有一个关于这个的问题,但唯一的答案是编码一些JavaScript验证,这也拒绝在我的部分视图上工作(“$未定义”)。为什么表单验证在MVC3部分视图中不起作用?

反正我不想使用JavaScript我只是想对不能留空必填字段,号码字段需要整型等简单的验证

任何人都可以摆脱对验证和部分景色一些轻?

+1

,我们可以看到一些代码吗? – simonlchilds

+0

我需要显示一些代码吗?在部分视图中进行验证似乎是MVC3(甚至MVC2)的一个常见问题,而且似乎除了Javascript解决方法之外似乎没有太多解决方案。 – DevDave

+0

@Tyler,是的,你需要显示一些代码来重现问题。就我个人而言,我从来没有在ASP.NET MVC的partials中进行客户端验证的任何问题。 –

回答

4

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

布拉德·威尔逊也在他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> 

另外,还要确保你没有任何引用微软的* .js文件脚本。它们已经过时,不应再用于ASP.NET MVC 3.

当然,这只是一个假设,你没有显示任何代码,所以我们不知道你在做什么。

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")); 
        } 
相关问题