1

POST された json オブジェクトを受け取ることになっているアクションを持つコントローラーがあります。

[HttpPost]
public ActionResult EditProject(ProjectDetails project)
{
    return Json(project);
}

ただし、実際に返されるのは、新しい空のプロジェクト オブジェクトです。プロジェクトオブジェクトにID以外のものを実際に入力していないようです(mywebsite/mycontroller/EditProject/3たとえば、URLから取得されます)。

私のProjectDetailsオブジェクトは次のようになります。

public class ProjectDetails
{
    public int ID { get; set; }
    public string Name { get; set; }
    public DateTime Date { get; set; }
    public List<Factor> factors { get; set; }

    public ProjectDetails() 
    { 
        factors = new List<Factor>();
    }

    public ProjectDetails(Project p)
    {
        ID = p.PrjID; 
        Name = p.Name;
        Date = p.PrjDate;
        factors = p.factors;
    }
}

投稿する JavaScript コードは次のようになります。

    function save() {
        var data = {
            ID: 4,
            Name: "foo",
            Date: Date.now(),
            factors: []
        };

        $.ajax(window.location.href, {
            type: "POST",
            dataType: "json",
            data: JSON.stringify({ project: data }),
            success: function () {
                alert("done");
            }
        });
    }

私はこれに関するバリエーションを数時間いじっていましたが、送信した投稿データを頑固に無視し、代わりに定義されたProjectDetailsものだけで新しいものを構築しました。ID

何か案は?

同じコントローラへの GET リクエストによって生成された JSON データを使用して、それを直接送信しようとしても (正しい形式でなければなりませんよね?)、それでも無視されます。

アップデート

これをもう少し見てみると、リクエストは として送信されていapplication/jsonますが、コントローラーにブレークポイントを設定してリクエストを確認するとapplication/x-www-form-urlencoded、json 文字列がRequest.Form[0]. しかし、私が読んでいた他のすべてから、これはうまくいくはずです. json 文字列を取得して自分で逆シリアル化する必要はありません。それで、私はここで何が欠けていますか?

4

1 に答える 1

3

わかりました、私はそれを修正しました。Firebug がリクエスト ヘッダーapplication/json

contentType: "application/json"

顔やし

于 2013-03-27T20:33:59.903 に答える