【发布时间】:2017-12-17 06:38:51
【问题描述】:
我正在学习使用 Ajax 进行 POST,我注意到很多在静态数组上使用 stringify 的示例。
在我的示例中,我通过从 <input> 值中提取的 jQuery 对象构建数组。
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 的值是我看到的大多数示例在字符串化之前的结构,例如示例here。
一旦采用这种格式,这是大多数响应的时候,示例无论如何都会调用 stringify。
现在当我打电话给.stringify(ViewData : vData) 时,我什至连控制器都没有。 Ajax 无法发布。相反,当我调用.stringify(ViewData : content) 时,我将其发送到控制器,但值为空。我错过了什么/误解了什么?
我正在寻找关于 Ajax Post 和 Stringify 以及它如何与控制器参数交互的更好解释。
【问题讨论】:
-
你试过“数据:vData”吗?
-
像这样传递
var myArray = new Array(); myArray = {"Id":"1","Date":"7/12/2017 12:00:00 AM"}; var myData = { ViewData : myArray };然后在你的ajax data:myData,就是这样! -
什么是
DataViewModel? -
@Musa
DataViewModel是一个由两个值组成的类,Id和Date对应于我的 JS 对象。 -
@HenriqueOeckslerBertoldi 是的
标签: javascript jquery ajax asp.net-mvc