2

私はこのようなビューを持つmvc2アプリケーションを持っています

    <% using (Ajax.BeginForm("UserApprove", new { id = Model.id }, new AjaxOptions() { UpdateTargetId = "statusLights", OnSuccess = "HideButtons" }, new { id = "UserApprove" }))
   {%>

<input type="button" value="Approve" onclick="$('#dialogApprove').dialog('open')" />
<div id="dialogApprove" title="Confirm">
    <p>
        Are you sure you want to approve this request?
    </p>
</div>
<% } %>

参考までに、コントローラーは部分ビューを返します。

以前はjqueryダイアログがなく、単純な

<input type="Submit" value="Approve" /> 

以前は正常に機能していました

jqueryダイアログを追加しましたが、ダイアログを初期化するためにこのようなものがあります。

 $("#dialogApprove").dialog({
        autoOpen: false,
        draggable: true,
        resizable: false,
        buttons: {
            "Cancel": function() {

                $(this).dialog("close")
            },
            "Approve": function() {
                $("#UserApprove").submit();
                $(this).dialog("close");
            }
        }
    });

$( "#UserApprove")。submit(); ajax投稿を行っていないようです。新しいページに返される部分ビューのテキストだけが返されます。

.ajaxSubmit()を持つjqueryフォームプラグインを使用したくありません。jqueryダイアログの「承認」ボタンからajax投稿を強制する他の方法はありますか?

4

4 に答える 4

1

imho、MSMVCAJAXが壊れています。jqueryを使用して次のようなフォームを送信する方がはるかに優れていることがわかりました。

$.ajax({
                        type: $("#UserApprove").attr("method"),
                        url: $("#UserApprove").attr("action"),
                        data: $("#UserApprove").serialize(),
                        success: function(data, textStatus, XMLHttpRequest) {
                            $("#SomeDiv").html(data); //replace the reports html.

                        },
                        error: function(XMLHttpRequest, textStatus, errorThrown) {

                            alert("Yikers! The AJAX form post didn't quite go as planned...");
                        }
                    });

パーシャルを使用してデータをレンダリングしていること、およびRequest.IsAjaxRequest()を使用してデータをパーシャルに送信していることを確認してください。

より完全なコードについては、こちらの私の投稿を参照してください。

于 2010-03-30T16:25:50.753 に答える
1

試す:

$("#dialogApprove").dialog({
    autoOpen: false,
    draggable: true,
    resizable: false,
    buttons: {
        "Cancel": function() {

            $(this).dialog("close")
        },
        "Approve": function() {
            $.post($("#UserApprove").attr('action'), $("#UserApprove").serialize(), 
                   function(result) {
                    // result will be your partial view
                    $(this).dialog("close");
                   }
            );
        }
    }
});

これにより、フォームが投稿され、コールバックで部分ビューが返されます。`

于 2010-03-30T16:26:06.100 に答える
1

MVC Ajaxヘルパーを使い続ける場合は、AjaxOptionsに確認メッセージを追加する必要があります。これは、標準のjavascript確認ダイアログを使用してメッセージを表示し、アクションが確認された場合にのみ続行します。jQuery UIダイアログを使用する場合は、通常のフォームを使用し、[承認]ボタンハンドラーを使用して、.ajax()または[.post()承認]ボタンハンドラーでダイアログを送信することをお勧めします。基本的に、ヘルパーメソッドがAJAXを使用して投稿を行うために挿入するのと同じコードを記述し、ターゲットのコンテンツを返されたHTMLに置き換えます。

于 2010-03-30T16:26:20.870 に答える
1

$ .post()または$ .ajax()を試しましたか?

"Approve": function() {
      var form = $('#userapprove');
      $.post(form.attr('action'), form.serialize());
      $(this).dialog("close");
}
于 2010-03-30T16:19:51.653 に答える