将Microsoft MVC ajax和验证助手与本机jquery ajax混合使用

将Microsoft MVC ajax和验证助手与本机jquery ajax混合使用,jquery,ajax,asp.net-mvc,validation,mixing,Jquery,Ajax,Asp.net Mvc,Validation,Mixing,导言 这篇文章是关于将MicrosoftMVC助手与本地jQueryAjax混合使用的。我一路上遇到的主要问题是: 双重投稿 @Html.validationMessage用于不输出 属性 要求 我需要验证并发布表单(id=“我的表单”) 表单绑定到一个用验证属性修饰的模型,因此我想使用@Html.ValidationMessageFor等帮助器方法来利用不引人注目的优势 我需要客户端和服务器端验证(服务器端我对数据库进行唯一名称检查) 在提交表单以添加其他表单数据时,我需要进行一些客户端处理

导言

这篇文章是关于将MicrosoftMVC助手与本地jQueryAjax混合使用的。我一路上遇到的主要问题是:

  • 双重投稿
  • @Html.validationMessage用于不输出
    属性
  • 要求

  • 我需要验证并发布表单(id=“我的表单”)

  • 表单绑定到一个用验证属性修饰的模型,因此我想使用@Html.ValidationMessageFor等帮助器方法来利用不引人注目的优势

  • 我需要客户端和服务器端验证(服务器端我对数据库进行唯一名称检查)

  • 在提交表单以添加其他表单数据时,我需要进行一些客户端处理

  • 迭代步骤

    步骤1

    我一开始没有原生jquery,而是使用Microsoft helper创建ajax表单:

    @using (Ajax.BeginForm( ...
    
    所有的工作都像广告上说的那样。这给了我一个不引人注目的验证,但它并没有满足我定制的表单数据发布要求

    所以我想我应该覆盖提交过程

    步骤2

    在document ready中,我连接了新的事件处理程序:

    $(document).ready(function () 
    {
        // Rebind validators
        $.validator.unobtrusive.parse('#my-form');
    
        // Hook up submit event
        $("#my-form").submit(SubmitForm);
    });
    
    在我的提交功能中,我可以自己处理表单数据:

    function SubmitForm(e) 
    {
        // Suppress normal event behaviour
        e.preventDefault();
    
        // Validate the form
        var valid = $("#my-form").validate();
        if (valid.errorList.length > 0)
            return;
    
        // Collect up form data manually
        var formData =  ...(code removed for clarity)
    
        // Display animated gif
        $("#ajax-loader").css("display", "inline")
    
        // Post Form
        $.post(
                '@Url.Action("MyAction", "MyController")',   // url
                formData,                                   // data
                SuccessFunction                             // success
            )
            .error(ErrorFunction);                         // error
    }
    
    好了,现在场景设置好了

    问题

    一个问题是我混合了两种ajax。这导致了双重职位。使用fiddler,我可以看到帖子发生了两次。(一次用于micosoft表单声明,一次用于jquery post) 这是因为两个处理程序已连接。通过谷歌搜索,我发现有些人正在使用jquery删除一个处理程序,但看起来有点混乱

    步骤3

    因此,我将@using(Ajax.BeginForm(…语法)更改为一个简单的表单标记:

    <form id = "my-form">
       ...
    </form>
    
    我使用Html.BeginForm纯粹是为了让我的@Html.ValidationMessageFor完成它们的工作。“MyAction”和“MyController”参数都是多余的,因为我的自定义事件处理程序接管了表单提交过程

    已解决

    现在一切似乎都好了

  • 无重复提交
  • 使用@Html.ValidationMessageFor进行不引人注目的验证
  • 定制表格处理/提交
  • 客户端和服务器端验证
  • 我的问题。

    这是正确的方法吗? 我很想听听其他人在这方面的经验

    问候


    Phil

    通常在这种情况下,我喜欢中建议的方法。现在,首先它将在客户端为您生成验证,可以使用JQuery进行检查,并且您还可以在服务器端创建/生成强制验证。这意味着您在类中定义规则,如示例所示,然后使用该类检查验证。因此将在服务器端检查。我通常使用ajax只是不编写html,大多数时候我会忘记右括号和一些东西,所以助手很好,但我不支持ajax.Beginform。简单的Beginform很好

    我通常使用拇指法则,视图必须有简单清晰的HTML或帮助程序,我尽量少嵌套div和其他东西

    请让我知道是否有任何进一步的细节需要在这个主题。有几个好的文章,你可以在网上找到这个。如果你想我可以分享

     @using (Html.BeginForm("MyAction", "MyController", FormMethod.Post, new { id = "my-form" })) 
     {....