我有一个控制器,它有一个应该采取 POST'ed json 对象的操作:
[HttpPost]
public ActionResult EditProject(ProjectDetails project)
{
return Json(project);
}
但是,实际返回的是一个新的空项目对象。它似乎实际上并没有用 ID(例如来自 url mywebsite/mycontroller/EditProject/3
)以外的任何东西填充项目对象。
我的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
我可以在Request.Form[0]
. 但是从我正在阅读的所有其他内容来看,这应该可以正常工作。我不应该自己检索 json 字符串并反序列化它。那么我在这里错过了什么?