分析 JSON 对象以通过 ajax 将参数传递到 C# MVC3 控制器中的泛型列表
本文关键字:控制器 MVC3 列表 泛型 参数传递 对象 JSON ajax 分析 | 更新日期: 2023-09-27 18:32:00
我有一点jquery代码:
//foreach the inputs
json.push({
Var1: $(this).attr("id"),
Var2: filename,
Var3: hash_name
});
//end foreach
$.post(url, {test: json}, function(){}, 'json');
我们假设 json 有 3 个对象(在浏览 3 个输入并获取它们的值之后)。 以及 MVC3 模型中的结构:
public struct Simple
{
public string Var1 {
get;
set;
}
public string Var2{
get;
set;
}
public string Var3{
get;
set;
}
public bool Var4 {
get;
set;
}
}
和控制器:
[HttpPost]
public ActionResult Test( List<Simple> test) {
...
}
List<Simple>
返回 3 个元素(此处是正确的),但所有属性的值均为空(Var4 除外,该值为 false)。
为什么?
如果你要做的是模型绑定,那么还需要做更多的工作。但是,如果您只是想要服务器端的json数组,那么这里有一个快速的技巧。下载System.Json(您可以通过NuGet完成)。在客户端不要发送 JSON 对象,因为这需要完全不同的方法。而是事先将其串起来
$(document).ready(function () {
var json = [
{
Name: "John Doe",
Age: 34
}];
var str = JSON.stringify(json);
console.log(str);
$.ajax({
url: '/mycontroller/LoadJson',
data: { values: str },
type: 'POST',
success: function (data) {
//do something
}
});
});
在服务器端,您可以使用 JsonValue.Parse 作为动态对象(然后您可以将其"翻译"为自定义对象之一)
[HttpPost]
public ActionResult LoadJson(FormCollection collection)
{
dynamic values = JsonValue.Parse(collection["values"]);
for(int i = 0; i < values.Count; i++)
{
var _output = string.Format("My name is {0} and I'm {1} of age", values[i].Name, values[i].Age);
Console.WriteLine(_output);
}
return RedirectToAction("Index");
}
这是一篇关于动态 Json 解析的较长文章http://www.west-wind.com/weblog/posts/2012/Mar/19/Dynamic-JSON-Parsing-in-NET-with-JsonValue
希望这有帮助
名称应该是这样的(Json 键值)
test[0].Var1
test[0].Var2
test[0].Var3
test[1].Var1
.....
Or
[0].Var1
[0].Var2
[0].Var3
......
服务器无法关联每个对象的属性是什么的想法,所以数字仅用于分组
Var4
是假的,因为模型绑定器用它的默认值实例化了它,它没有从表单中读取任何值
前任
爪哇语
json.push({
'test[0].Var1': $(this).attr("id"),
'test[0].Var1': filename,
'test[0].Var1': hash_name
});
应递增每个对象的0
JavaScript 中test
的名称必须与操作方法的参数名称匹配