使用jQuery.Templates Scenario进行jQuery验证

我正在使用jQuery模板来处理我正在研究的一堆网站,并且已经达到了我需要决定如何实现验证的目的. Serverside是一个Asp.Net Mvc Restful服务,可以处理各种模型.模型使用DataAnnotations进行修饰以描述验证.下面是一个示例(请注意,我们正在使用资源文件进行错误复制):

    [Required(
        ErrorMessageResourceType = typeof(Validation),
        ErrorMessageResourceName = "HomeAddressRequired")]
    [StringLength(250,
        ErrorMessageResourceType = typeof(Validation),
        ErrorMessageResourceName = "HomeAddressStringLength")]
    public string Address { get; set; }

以前,我只使用了Razor(或旧的Asp.Net视图引擎,直到我们切换到Mvc 3),它处理生成jquery.validate.js挂钩所需的所有客户端装饰.现在我正在使用jQuery模板,这不太可行.

我在这里看到三个选项:

>修改模板以手动包含验证和错误副本.这个很糟糕,因为我将被迫分别维护客户端和服务器端验证;它有点杀死了DataAnnotations的整个想法.
>利用Razor和Mvc 3的不显眼的javascript方法来帮助我渲染模板.更好,因为它为我重现了验证,但是性能受到了影响.也意味着我正在使用服务器端模板引擎…来呈现模板.我可以通过输出缓存最小化性能.
>仅依靠远程验证,返回模型的模型状态,并为jQuery Validate编写自己的适配器,以处理适当元素的路由错误.这个必须使用Razor,但杀死纯客户端验证,这意味着我必须编写一个复杂的插件.

理想情况下,当我们部署这个东西时,我应该能够将模板作为静态文件提供给客户端,而不需要任何直接的后端依赖.

所以,我的问题是:在我的模型服务器端利用jQuery Templates clientside和DataAnnotations,处理验证的最有效方法是什么,而不重复自己?

最佳答案 我会去2)

错误模板可以位于客户端.不友好的服务器端代码是为jQuery.validation设置规则的代码.但是,由于您的规则是在.NET模型中定义的,因此无法避免这种情况.

我今天遇到了类似的问题但是有了样式,我不太喜欢jQuery.validation如何为你制作标签.我想用jQuery模板覆盖输出.我还希望我的输出位于表的另一个单元格中.

显然,您可以在插件中覆盖validator.prototype.showLabel函数.现在,您可以完全控制显示位置以及出现故障时要显示的内容.

这是一个例子:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title></title>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.js"></script>
    <script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js"></script>
    <script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.js"></script>


    <script type="text/javascript">
        $.extend($.validator.prototype, {
            showLabel: function (element, message) {
                $(element).siblings('.validationLabel').remove();
                $('#tmplValidationLabel').tmpl({ Message: message }).insertAfter($(element));
            }
        });
    </script>
</head>
<body>


<form>
    <div><input type="text" name="Email" /></div>
    <div><input type="text" name="SomeName" /></div>
    <input type="submit" value="Submit" />
</form>



<script type="x-jquery-tmpl" id="tmplValidationLabel">
<span class="validationLabel">
    <b>${Message}</b> <span> :( </span>
</span>
</script>

<script type="text/javascript">
    $(function () {

        $('form').validate({
            rules: {
                Email: { required: true, email: true },
                SomeName: "required"
            },
            messages: {
                Email: { required: "Enter Email", email: "Not an email" },
                SomeName: "Enter something man!"
            }
        });
    });
</script>
</body>
</html>

希望能帮助到你,

点赞