部分视图中的客户端验证,在jquery对话框中呈现,没有Unobtrusive

时间:2012-11-19 20:33:35

标签: jquery asp.net-mvc-3 jquery-validate asp.net-ajax unobtrusive-validation

我在jquery对话框中登录了部分视图。当我点击"登录"带有空文本框的按钮,应显示错误,但它与服务器的空值一致并得到此错误。 我想使用客户端验证,但对话框中的局部视图不会更改为html输入.... 另外我尝试使用Unobtrusive,但我在IE9中遇到了变量错误。

现在,我使用了这些脚本:

 <script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery-ui.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>
    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>

如果没有不引人注意的话,我应该怎样做客户端验证?

1 个答案:

答案 0 :(得分:2)

如果您不想使用不显眼的插件,则需要手动配置jquery验证插件。 有多种方法可以做到这一点,我建议您从以下链接开始: http://docs.jquery.com/Plugins/Validation

但是考虑到通过不使用不显眼的验证插件,您将不会受益于MVC 3中有关客户端验证的所有基础设施,例如渐进增强或基于数据注释的客户端和服务器端验证。

ASP MVC 3附带的jquery.validate.unobtrusive脚本依赖于jquery版本1.5.1,它也随MVC 3一起提供。它可能适用于更高版本(我在版本1.6.4中使用它)但我不确定像1.4.4这样的低版本。 jquery.validation脚本也依赖于jquery版本。例如,jquery.validation 1.8可以很好地与jquery 1.5.1一起使用,但如果你使用的是jquery 1.6.4,则需要升级到jquery.validation 1.10。

因此,从默认的MVC 3应用程序,您可以使用以下脚本:

    <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.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>
    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

通过将这些设置添加到配置文件(在创建新的MVC 3应用程序时默认设置),确保在MVC应用程序上启用了客户端验证。

<configuration>
  ...
  <appSettings>
    ...
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    ...
  </appSettings>

最后考虑到验证不显眼的脚本在最初加载时会实际解析文档。 如果检查jquery.validate.unobtrusive.js文件,您将在文档末尾看到这些行:

$(function () {
    $jQval.unobtrusive.parse(document);
});

因此,在最初加载页面后加载到DOM中的任何内容都不会被不显眼的验证处理,并且需要由您手动解析。 这可以通过定义包含在页面中的以下函数或常用的javascript文件来完成:

function partialViewLoaded(request, status, partialViewId) {
    if (request.responseText != "") {
        //Hook validations on elements of the loaded view
        $.validator.unobtrusive.parse($(partialViewId));        
    }
}

使用ajax加载局部视图后将调用该函数。 如果您正在使用MVC Ajax帮助程序,则可以设置完整的回调,如下所示(假设您将视图加载到ID为“loginForm”的元素中):

@using(Ajax.BeginForm(new AjaxOptions{ 
                           UpdateTargetId = "loginForm", 
                           OnComplete = "partialViewLoaded(xhr, status, '#loginForm')" })){

如果您使用jquery手动执行ajax调用,那么您也可以设置完整的回调,如下所示:

$.ajax({
     url: "yourURL",
     complete: function(xhr, status){
         partialViewLoaded(xhr, status, "#loginForm");
     }
});