我正在学习使用Ajax进行POST,并且我注意到很多在静态数组上使用stringify的例子。
在我的例子中,我通过从<input>
值中提取的jQuery对象来构建数组。
function PostEdit(vData){
var content = JSON.stringify(vData); //content = "[{"Id":"1","Date":"7/12/2017 12:00:00 AM"}]"
$.ajax({
url: '@Url.Action("Index", "PostViewData")',
type: "POST",
data: JSON.stringify({ ViewData : vData }),
contentType: "application/json",
success: function (result) {
alert("success" + result);
},
error: function (result) {
alert("failure" + result);
}
});
return;
}
[HttpPost]
public ActionResult Index(List<DataViewModel> ViewData )
{
if(ViewData != null)
{
var json = new { success = true };
return Json(json);
}
return Json(false);
}
public class DataViewModel
{
public DataViewModel(string id, string date)
{
Id = id;
Date = date;
}
public string Id { get; set; }
public string Date { get; set; }
}
DataViewModel
是一个由两个值组成的类,Id
和Date
,对应于我的JS对象。
由于vData
以值vData = [Object]
的形式输入功能,当我致电.stringify(vData)
时,它会返回content = "[{"Id":"1","Date":"7/12/2017 12:00:00 AM"}]"
上面content
的值是我在stringify之前看到的大多数示例,例如示例here。
一旦采用这种格式,这就是大多数响应的时候,例子仍然会调用stringify。
现在,当我打电话给.stringify(ViewData : vData)
时,我甚至没有把它交给控制器。 Ajax无法发布。相反,当我调用.stringify(ViewData : content)
时,我将它发送到控制器,但是具有空值。我错过了什么/误解了什么?
我正在寻找Ajax Post和Stringify的更好解释,以及它如何与控制器参数交互。
答案 0 :(得分:1)
请尝试以下解决方案。
还有另一种方法吗
function PostEdit(vId, vDate){
$.ajax({
url: '/PostViewData/Index' // it should be '/controller/method'
type: "POST",
data: JSON.stringify({ Id: vId, Date: vDate}),
contentType: "application/json",
success: function (result) {
alert("success" + result);
},
error: function (result) {
alert("failure" + result);
}
});
return;
}
[HttpPost]
public ActionResult Index(string Id, string Date )
{
if(Id != null)
{
var json = new { success = true };
return Json(json);
}
return Json(false);
}
更新:在控制器方法中,它应该是字符串id,字符串日期
更新:构造函数应该是无参数的。从下面提到的答案
public DataViewModel()
{
}
答案 1 :(得分:1)
只需将无参数构造函数添加到模型中即可。通过这种更改,您的代码将按原样运行。 ASP无法将您的json解析为DataViewModel,因为它试图调用不存在的默认构造函数。
public class DataViewModel
{
public DataViewModel()
{
}
//...other methods and members here
}