0

私は ASP.NET MVC 3 アプリケーションに取り組んでおり、[OK] ボタンを使用して jquery ダイアログを表示しています。[OK] をクリックすると、jquery AJAX を使用してフォームを送信します。

私の ajax 呼び出しは次のようになります。

$("#free-trial").dialog({
   autoOpen: false,
   autoResize: true,
   buttons: {
       "OK": function () {
           if (notvalid()) {
               $(".ui-dialog-titlebar").hide();
               $("#dialog-freetrial-insufficientdata").dialog({ dialogClass: 'transparent' });
               $("#dialog-freetrial-insufficientdata").dialog("open");
           }
           else {
               $('#frmCreateTrialAccount').live('submit', function (e) {
                   e.preventDefault();
                   $.ajax({
                       cache: false,
                       async: true,
                       type: "POST",
                       url: $(this).attr('action'),
                       data: $(this).serialize(),
                       success: function (data) {
                           alert(data);
                       }
                   });
               });
               jQuery(this).dialog('close');
           }
       }
   },
   open: function () {
       $('.ui-dialog-buttonset').find('button:contains("OK")').focus();
       $('.ui-dialog-buttonset').find('button:contains("OK")').addClass('customokbutton');
   }

});

フォームは次のようになります。

@using (Html.BeginForm("CreateTrialAccount", "Home", FormMethod.Post, 
              new { Id = "frmCreateTrialAccount" } ))
{

}

コントローラーのアクションは次のようになります。

[HttpPost]
public JsonResult CreateTrialAccount(FormCollection form) {
    return Json("dummy data");
}

ただし、このメソッドではフォームは送信されません。

これらのファイルがレイアウト ページに含まれています。

<link href="@Url.Content("~/Content/css/smoothness/jquery-ui-1.10.0.custom.css")" rel="stylesheet" type="text/css"  media="screen"/>
<script src="@Url.Content("~/Scripts/jquery-1.9.1.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui-1.10.2.custom.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

これに対する解決策を教えてください。

4

1 に答える 1

3

私が行ったコメントで申し訳ありません。あなたの問題は、フォームの送信アクションを、既に送信しているはずの場所にバインドしていることです。フォームの送信をバインドする場合は、外部で宣言し$("#free-trial").dialog({ます。次に、別の関数で ajax post メソッドを使用できるため、バインディング コードと$("#free-trial").dialog({.

var form = $('#frmCreateTrialAccount');
$.ajax({
    cache: false,
    async: true,
    type: "POST",
    url: form.attr('action'),
    data: form.serialize(),
    success: function (data) {
        alert(data);
    }
});

したがって、明確にするために、次のコード行を削除してください。

$('#frmCreateTrialAccount').live('submit', function (e) {
e.preventDefault();
// and the ending 
});
于 2013-05-02T13:37:29.840 に答える