【问题标题】:ASP.Net MVC: Can you use Data Annotations / Validation with an AJAX / jQuery call?ASP.Net MVC:您可以通过 AJAX/jQuery 调用使用数据注释/验证吗?
【发布时间】:2013-03-19 05:53:12
【问题描述】:

你可以在 AJAX / jQuery 调用中使用数据注释 / 验证吗?如果是这样,请提供示例或显示示例的帖子。

基本上我已经看到了一个如何使用数据注释的示例,但是它是一个完整的回帖。有没有办法处理 AJAX / jQuery 调用?不确定您将如何执行此操作,因为我不确定您将如何在客户端构造 Model 对象。 (我认为这是你必须要做的。)

有人告诉我这可以做到,但我就是不明白它是怎么做到的。

感谢您的帮助。

【问题讨论】:

    标签: ajax asp.net-mvc data-annotations


    【解决方案1】:

    是的 - 100% 我一直都这样做。使用 Ajax.BeginForm 并使用不显眼的验证 http://completedevelopment.blogspot.com/2011/02/unobstrusive-javascript-in-mvc-3-helps.html

    这将发出客户端所需的一切.. 尽管您必须再次连接验证器以告诉 jQuery 我们已经加载了一些需要验证的内容

    我相信我的这个想法/代码来自:http://xhalent.wordpress.com/2011/01/24/applying-unobtrusive-validation-to-dynamic-content/

    无论哪种方式,我下面的工作都是有效的,我目前正在使用它,尽管我添加了一些调试。

    (函数($){ $.validator.unobtrusive.parseDynamicContent = 函数(选择器){ var len = $(选择器).length; //alert('得到长度'); if ($(selector).length == 0) { alert('在 DOM 中找不到作为根级别传入以开始验证解析(而不是再次解析整个文档)的选择器(通常是 div)。此表单上的验证可能不会继续。选择器参数是:' + 选择器); 返回; } //使用普通的 unobtrusive.parse 方法 $.validator.unobtrusive.parse(选择器); //获取相关表格 var form = $(selector).first().closest('form'); if (form.length == 0) { alert('找不到作为选择器父级的表单:' + 选择器 + '\n验证可能无法正常工作'); 返回; } //获取不显眼的验证器和jquery验证器的集合 //并比较两者 var unobtrusiveValidation = form.data('unobtrusiveValidation'); //alert(unobtrusiveValidation.length); var 验证器 = form.validate(); $.each(unobtrusiveValidation.options.rules, function (elname, elrules) { if (validator.settings.rules[elname] == undefined) { 变量参数 = {}; $.extend(args, elrules); args.messages = unobtrusiveValidation.options.messages[elname]; //$('[name=' + elname + ']').rules("add", args); $('[name="' + elname + '"]').rules("add", args); } 别的 { $.each(elrules, function (rulename, data) { if (validator.settings.rules[elname][rulename] == undefined) { 变量参数 = {}; args [规则名称] = 数据; args.messages = unobtrusiveValidation.options.messages[elname][rulename]; $('[name="' + elname + '"]').rules("add", args); } }); } }); } })($);

    然后在您使用 ajax 加载的每个局部视图(或页面)中,具有以下内容: (注意 editCustomerAddress 是包含我的新内容的 div 名称,因此 jQuery 不必重新解析我页面上的 everything 而只需要从我的动态内容向下)

    【讨论】:

      【解决方案2】:

      如果您使用 Html.AjaxForm(而不是 Html.BeginForm),那么它将使用 Ajax 进行验证。

      但是我认为您不能使用 jQuery 进行验证。 Microsoft 拥有自己的 Ajax 库,他们自己调用/维护它。我不认为你可以在两者之间挂上你自己的代码。

      【讨论】:

      • 从 mvc3 开始,ms 库主要依赖于幕后的 jQuery!
      • 我可以使用 AjaxForm 做到这一点
      猜你喜欢
      • 1970-01-01
      • 2014-04-19
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-08
      相关资源
      最近更新 更多