0



現在のシナリオ

vs2012でMVC4、.net4.5を使用しています。カスタムタイプを受け入れるアクションがあります。このカスタムタイプ(モデル)は、ビューに緊密にバインドされています。JSONを使用してAJAX経由でPOSTを作成しています。投稿は関連データのみを投稿し、フォームは投稿しません。そのコンテンツタイプは「application/json; charset=UTF-8」です。私のアクションでは、適切に設定された(有効な読み取り)モデルを取得しています。

問題
カスタムフィルターを追加する必要がありますが、Request、Request.Form、Request.Paramを介してデータにアクセスできませんか?私はSystem.Web.HttpContext.Currentを探していました。モデルにデータが入力されている場合は、リクエスト自体のどこかにある必要があります。私はより細かい印刷が欠けていると思います。

データを投稿するためのJavaScriptはやや似ています

$("#postData").click(function (event) {

    var savedObject = getJson(savedObject, parentContext);

    $.ajax({
        url: '/controller/action',
        contentType: 'application/json',
        dataType: 'json',
        data: savedObject,
        type: "POST",
        success: successCallBack,
        error: errorCallBack
    });
});
4

2 に答える 2

1

コードはわかりませんが、jQuery.ajaxの呼び出しからcontentType: "application / json; charset = utf-8"を削除すると、デフォルトのコンテンツタイプ(form-urlencoded)が使用され、jsonデータが使用されます。データパラメータとして指定されたもの(data:{i:i、s:s、b:b})は、アクションパラメータに正しくマッピングされます。したがって、本当にjsonデータを送信する場合を除いて、contentTypeを削除するだけです。元気に.....これを見てください

于 2013-01-31T06:32:32.573 に答える
1

JSONデータのみを送信したいというあなたの希望がわかります。本当にこれに固執する必要がある場合は、を介して生のパラメータにアクセスできますRequest.InputStream

コントローラ:

var input = new StreamReader(Request.InputStream).ReadToEnd();

これにより、手動で解析できるURLエンコードされた文字列が取得されます。

本当に、行きたい場所にたどり着く正しい方法として、Shahroozの答えをお勧めします。

application/jsonコントローラーのRequest.FormがAjax投稿に入力されていない場合は、contentTypeが(一般的なシナリオ)のデータを手動でシリアル化してコントローラーに送信している可能性があります。

これは、コントローラーにRequest.Formを設定しないjQuery.ajaxの例です。

    // JSON serialized form data.
    var data = {"id" : "1234", "name" : "Dave"};

    $.ajax({
        type: "POST",
        url: serviceUrl,
        contentType: "application/json",
        dataType: "json",
        data: JSON.stringify(data || {}),
        success: function () { }
    });

contentTypeを変更すると、コントローラーはフォーム送信のように投稿を処理します。

    // Form encoded data.        
    var data = {"id" : "1234", "name" : "Dave"};
    data = $.param(data);

    $.ajax({
        type: "POST",
        url: serviceUrl,
        contentType: "application/x-www-form-urlencoded; charset=UTF-8",
        dataType: "json",
        data: data,
        success: function () { }
    });

application/x-www-form-urlencoded; charset=UTF-8jQueryのデフォルトであるため、contentTypeを未定義のままにすることもできます。

何が起こっているのかをよりよく説明するために$.ajaxのみを使用したことに注意してください。$ .postを使用することもできますが、フォームでエンコードされたデータを送信する必要があります

于 2013-03-12T15:09:55.363 に答える