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 文字列を取得して自分で逆シリアル化する必要はありません。それで、私はここで何が欠けていますか?