0

私はそのようなダイアログボックスを使用しています:

    <div id="dialog" title="Edit Information" style="overflow: hidden;">
    </div>


    $('#dialog').load("@Url.Action("EditInfo")",
                    function(response, status, xhr) {
                        $('#dialog').dialog('open');
    });

ユーザーユーザーがダイアログボックスで送信をクリックすると、httppostにアクセスします。

     [HttpPost]
     public ActionResult EditInfo(MicroInfo model)
     {
        if (ModelState.IsValid)
        {
            lbService.EditMicroInfoData(model);
            return View(model); // success 
        }

        return View(model); // problem           

     }

それが行くとき

    return View(model) // success

、ダイアログボックスではなく、通常のページで開きます。ユーザーがダイアログボックスを閉じることができるように、ダイアログボックスで再度開くのが好きです。

私はこれをでやるべきかどうか疑問に思っています

      $.ajax( .... 

電話

4

1 に答える 1

3

Ajax.BeginFormロードしているパーシャルの内側を使用できます。したがって、ロードするコンテンツをパーシャル内に配置し、HttpPostコントローラーアクションで、ビュー全体を返すのではなく、これと同じパーシャルビューを返すようにします。

フォームを機能させるjquery.unobtrusive-ajax.js場合は、スクリプトをページに含めることを忘れないでください。Ajax.BeginForm

Ajax.BeginFormを使用する代わりに、通常のHtml.BeginFormを使用して、手動でAJAX化することもできます。

$(document).on('submit', '#dialog form', function() {
    $.ajax({
        url: this.action,
        type: this.method,
        data: $(this).serialize(),
        success: function(result) {
            // Here you could test the result of the controller action
            // and in case it is success close the modal
            // I would recommend you returning a Json result in this case
            // so that here you could test for it:
            if (result.success) {
                $('#dialog').dialog('close');
            } else {
                // a partial view was returned, probably an error =>
                 // refresh the dialog
                $('#dialog').html(result);
            }
        }  
    });
    return false;
});
于 2013-01-29T21:17:45.257 に答える