0

2つのオブジェクトを引数として取るコントローラーアクションがあります。私はそれをまったく動作させることができません。彼らは常にnullとして戻ってきます。私の最近の試みは以下のようになります。私は他の多くのバリエーションを試しました。この場合、FormInfoクラスは、Form1とForm2のタイプである2つのプロパティを持つクラスです。また、コントローラーに2つのクラスを引数として取り込んでみましたが、データ部分は{form1:form1Data、form2:form2Data}のように見えましたが、これも機能していませんでした。また、JSON.stringifyを使用してデータを作成しようとしましたが、うまくいきませんでした。ネットワークモニターを見ると、データがサーバーに戻っているのがわかります。これは、MVCがクエリ文字列をオブジェクトにデコードするために使用するエンジンであり、私が返しているものを処理できません。情報をよろしくお願いします!

クライアント側

var formData = $("#form1").serialize();
var formData2 = $("#form2").serialize();
var formInfo = new Object();

formInfo.FormData = formData;
formInfo.FormData2 = formData2;

$.ajax({
    url: 'Controller/Action',
    type: 'POST',
    data:  formInfo,
    success: function (data) {
        //do stuff
    }
});

サーバ側

public ActionResult SaveForms(FormInfo formInfo)
{
    //Do Stuff here
}
4

2 に答える 2

1

.serializeArray()JSONリクエストをjQueryメソッドと組み合わせて使用​​できます。次のモデルがあるとします。

public class FormInfo
{
    public Form1Data Form1Data { get; set; }
    public Form2Data Form2Data { get; set; }
}

ここでForm1Data、およびForm2Dataは完全に任意の複雑なクラスです。ここで、クライアントには2つの異なる形式があると想定しています(その入力要素名は、デフォルトのモデルバインダーワイヤー形式#form1に関して複雑な構造と一致します)。AJAXリクエストを送信し、2つのフォームを一緒にパックするのは簡単です。#form2

var form1Data = {};
$.each($('#form1').serializeArray(), function () {
    form1Data[this.name] = this.value;
});

var form2Data = {};
$.each($('#form2').serializeArray(), function () {
    form2Data[this.name] = this.value;
});

$.ajax({
    url: '@Url.Action("someaction", "somecontroller")',
    type: 'post',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify({
        form1Data: form1Data,
        form2Data: form2Data
    }),
    success: function (result) {
        // TODO: do something with the result 
    }
});

そしてもちろん、POSTするコントローラーアクションは次のようになります。

[HttpPost]
public ActionResult SomeAction(FormInfo formInfo)
{
    ...
}
于 2012-07-02T21:46:22.080 に答える
0

私はこのようなことをしていますが、コントローラーを渡すためのオブジェクトと他のFormdataがあります

var discrepancy = self.newCptyReply();

        if ($('#UploadFile')[0]) {
            var upload = new FormData(),
                file = $('#UploadFile')[0].files[0];

            upload.append('id', self.globalMessageId());
            upload.append('discrepancy', ko.toJSON(discrepancy));
            upload.append('doc', file); 


        }           

        datacontext.saveCptyToReply(self, upload);

そしてコントローラーの署名

   public ActionResult SaveCptyToReply(Guid id, Trade discrepancy, HttpPostedFileBase doc)

しかし、コントローラーIDに達すると、docは問題ありませんが、不一致はnullになります...関数が呼び出されたときのデータがあります。

何をすべきか...

于 2014-01-17T21:37:28.383 に答える