2

JQuery とブートストラップを使用して ASP.NET MVC 4 アプリケーションを作成しています。

私のサイトには、別の開発者が Web サイトでスタイリング関連の変更を行った最近までスムーズに機能していたモーダル ダイアログ機能があります。

以下は、部分ビューの 1 つで記述したコードです。これを 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>        
}

ユーザーが「OK」ボタンを押すたびに「ChangeStatus」アクションが呼び出され、ビューが更新されていたため、これは以前は正常に機能していました。

しかし今、その開発者がいくつかの変更を行った後、「ChangeStatus」が非同期で 2 回ヒットし、実行時エラーが発生します。何が問題を引き起こしているのかわかりません。

以下は、このダイアログのロード中にロードされるスクリプト ファイルです。

  1. ajax.dialog.custom.js
  2. ブートストラップ.js
  3. jquery-1.9.1.js
  4. jquery-migrate-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

すべてのスクリプト ファイル (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番)を削除しようとしましたが、役に立ちませんでした。そのため、解決策を考えるときは、上記のファイルの影響を無視できます。

誰でも何か考えがありますか?他の開発者がスタイリング機能を変更するまで、同じコードが非常にうまく機能していたという事実を繰り返します。

4

3 に答える 3

3

It sounds like you may be submitting the form once from your script, and then again due to the browser's default behavior. Try adding this to the top of your handler:

event.preventDefault();
于 2013-03-29T13:08:46.077 に答える
1

送信ボタンに特定のカスタム属性がある場合、jquery.unobtrusive-ajax.js ファイルを変更して非同期呼び出しをスキップすることで、この問題を修正しました。

于 2013-04-02T13:12:47.470 に答える
0

あなたはあなたinput type="submit"を変えるinput type="button"

ここでは、フォームを 2 回送信しています。1 つはフォームのデフォルトの動作によるもので、もう 1 つはスクリプトによるものです。

于 2013-03-29T13:13:34.680 に答える