使用JQuery UI Dialog时,提交操作被击中两次

时间:2013-03-29 13:03:55

标签: jquery asp.net-mvc-4 modal-dialog

我正在使用JQuery和bootstrap编写ASP.NET MVC 4应用程序。

我的网站中有一个模式对话功能,直到最近,当另一个开发人员在网站上做了一些与样式相关的更改时,它才能顺利运行。

以下是我在部分视图中编写的代码,我在JQuery对话框中打开它:

@using (Ajax.BeginForm("ChangeStatus",
    new AjaxOptions { UpdateTargetId = "AboutOrderContainer", HttpMethod = "POST" }))
{
    @Html.HiddenFor(m => m.OrderId)
    <table class="row-fluid">
        <tr>
            <td></td>
        </tr>
        <tr>
            <td>
                Comments&nbsp;(Optional):
            </td>
        </tr>
        <tr>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td>
                @Html.TextAreaFor(m => m.Comments, new { @maxlength = 255, @rows=5 })
            </td>
        </tr>        
        <tr>
            <td>                
                <center>
                <input type="submit" title="OK" value="OK" class="btn" />
                    </center>
            </td>
        </tr>
    </table>        
}

这是之前的工作正常,因为每当用户点击&#34; OK&#34;按下&#34; ChangeStatus&#34;动作被调用,视图得到了刷新。

但是现在,在开发人员做了一些改变之后,&#34; ChangeStatus&#34;异步命中两次会导致运行时错误。我不确定是什么导致了这个问题。

以下是加载此对话框时加载的脚本文件:

  1. ajax.dialog.custom.js
  2. bootstrap.js
  3. 的jquery-1.9.1.js
  4. jQuery的迁移-1.1.1.js
  5. 的jquery-UI-1.10.2.js
  6. jQuery的不显眼-ajax.js
  7. jquery.validate.js
  8. jquery.validate.unobtrusive.js
  9. Modernizr的-2.5.3.js
  10. onmediajquery.js
  11. ecommercesite-custom.js
  12. 所有脚本文件(ecommercesite-custom.js除外)都是来自JQuery和引导程序站点的库。 以下是ecommercesite-custom.js文件的代码:

    $(document).ready(function () {
    
        $('input[class*=btn-submit]').click(function (event) {
            if (($(this).closest('form').valid())) {
                $(this).attr("disabled", true);
                $(this).closest('form').submit();
            }
            else {
                $(this).attr("disabled", false);
            }
        });
    
    });
    

    我不确定这里有什么问题。我已经尝试删除上面的js文件(即第11号),但它没有任何帮助。因此,在考虑解决方案时,您可以忽略上述文件的任何含义。

    任何人都有任何想法? 重申相同的代码工作得非常好,直到其他开发人员改变了一些样式功能。

3 个答案:

答案 0 :(得分:3)

听起来您可能正在从脚本提交表单一次,然后再次由于浏览器的默认行为。尝试将此添加到处理程序的顶部:

event.preventDefault();

答案 1 :(得分:1)

我通过更改jquery.unobtrusive-ajax.js文件来修复此问题,如果提交按钮具有特定的自定义属性,则跳过异步调用。

答案 2 :(得分:0)

您将input type="submit"更改为input type="button"

在这里,您要提交两次表单,一种是默认的表单行为,另一种是脚本