Asp.net mvc Json字符串列表为空
我正在将一个json字符串集合从Android设备传递到.net MVC HttpPost方法。我的json字符串类似于Asp.net mvc Json字符串列表为空,asp.net-mvc,json,http-post,Asp.net Mvc,Json,Http Post,我正在将一个json字符串集合从Android设备传递到.net MVC HttpPost方法。我的json字符串类似于 {"collection",[{"Name":"A","Age":"12","Class":"10"},{"Name":"B","Age":"12","Class":"10"}]} 我的MVC控制功能是: [HttpPost] public ActionResult Create(string[] collection) { try
{"collection",[{"Name":"A","Age":"12","Class":"10"},{"Name":"B","Age":"12","Class":"10"}]}
我的MVC控制功能是:
[HttpPost]
public ActionResult Create(string[] collection)
{
try
{
// TODO: Add insert logic here
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
List<Model.StudentBehaviour> stdbehaviour_list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Model.StudentBehaviour>>(collection);
Lib.StudentModule.StudentManager.InsertStudentBehaviours(stdbehaviour_list);
return Json("success", JsonRequestBehavior.AllowGet);
}
catch
{
return Json("exception", JsonRequestBehavior.AllowGet);
}
}
集合中的预期值为
collection[0]
Name = A
Age = 12
Class = 10
collection[1]
Name = B
Age = 12
Class = 10
请帮助解决此问题
提前感谢ASP.NET MVC具有ModelBinding的概念。这意味着,如果向操作方法添加参数,MVC将尝试用您发送的数据填充这些参数 这意味着您可以将代码更改为:
// Example of your Student class.
// Make sure that all properties you want to bind to are public
public class Student
{
public string Name { get; set; }
public int Age { get; set; }
public int Class { get; set; }
}
// Example of an Action method. Note that instead of taking a string as parameter,
// you just accept a collection of Student objects.
[HttpPost]
public JsonResult Create(List<Student> collection)
{
if (ModelState.IsValid)
{
return Json("success", JsonRequestBehavior.AllowGet);
}
else
{
return Json("exception", JsonRequestBehavior.AllowGet);
}
}
谢谢Wouter de Kort,我将尝试这种方法,我有一个快速的问题要问你,参数名和Json键应该相同吗?例如:如果我通过{“详细信息”:[{“姓名”:“A”,“年龄”:“12”,“班级”:“10”},{“姓名”:“B”,“年龄”:“12”,“班级”:“10”}]。但是我的HttpPost函数参数名是collection。这会产生任何问题吗?是的,它们应该是相同的。ModelBinding用于将参数名与请求中找到的数据相匹配。您好Wouter de Kort,我实现了您给定的代码。但仍然得到null。我在Global.ascx.Hi中必须做的任何事情都会得到值,如果我有s单个对象,如{“collection”、{“Name”:“A”、“Age”:“12”、“Class”:“10”}。但是如果使用am list,则会得到一个空对象。您不必在global.ascx中更改任何内容。我已在一个新的默认MVC项目中测试了此代码。如果将参数类型从list更改为string并发送多个对象,您会得到什么?
// Example of your Student class.
// Make sure that all properties you want to bind to are public
public class Student
{
public string Name { get; set; }
public int Age { get; set; }
public int Class { get; set; }
}
// Example of an Action method. Note that instead of taking a string as parameter,
// you just accept a collection of Student objects.
[HttpPost]
public JsonResult Create(List<Student> collection)
{
if (ModelState.IsValid)
{
return Json("success", JsonRequestBehavior.AllowGet);
}
else
{
return Json("exception", JsonRequestBehavior.AllowGet);
}
}
function sendData() {
var data = [{ 'Name': 'A', 'Age': '12', 'Class': '10' },
{ 'Name': 'B', 'Age': '12', 'Class': '10' }];
var collection = JSON.stringify(data);
$.ajax({
url: "Home/Create",
type: "POST",
data: collection,
dataType: 'json',
contentType: 'application/json; charset=utf-8',
}).done(function (msg) {
alert("Data Saved: " + msg);
});
}