【发布时间】:2023-03-19 16:01:01
【问题描述】:
这是我第一次使用 JSON,在我的控制器中解析和使用它时遇到了一些麻烦。我已经尝试过Unable to successfully receive JSON data to .NET MVC Controller、How to receive JSON as an MVC 5 action method parameter 这些解决方案,但没有一个适合我。
我正在从我的 html 中检索一些数据并通过 ajax 将数组发送到以下代码中的控制器:
JQuery:
var values = $('ul#values li').map(function() {
return this.textContent;
}).get()
var lines = $('ul#lines li').map(function() {
return {
Column: this.textContent,
Table: this.getAttribute("name")
};
}).get();
var columns = $('ul#lines li').map(function() {
return {
Column: this.textContent,
Table: this.getAttribute("name")
};
}).get();
var filters = $('ul#filters li.panel').map(function () {
var n = this.getAttribute("name");
var c = $(this).children()[1].textContent;
var r = $(this).find("li input:checked").map(function() {
return this.parentNode.textContent;
}).get();
if (r.length === 0)
return null;
else
return { table: n, name:c, vals: r };
}).get();
$.ajax({
type: "POST",
url: "/Home/PivotTable",
dataType: "json",
traditional: true,
data: {
indicators: values,
lines: JSON.stringify(lines) ,
columns: JSON.stringify(columns),
filters: JSON.stringify(filters)
},
success: function (data) {
alert(data.s, data.l);
}
});
这是正在发布的表单数据:
indicators: Taxa Mensal de inflação
lines:[{"Column":" Base","Table":"D_Base"}]
columns:[{"col":" Trimestre","table":"D_Calendario"}]
filters:[{"table":"D_PF_ClasseProdutos","name":" Código","vals":[" 22"," 23"]}]
并在我需要访问数据的控制器中接收数据:
public JsonResult PivotTable(string[] indicators, Lines[] lines, object[] columns, object[] filters)
{
string sa = indicators[0];
var l = lines;
var col = columns;
var fil = filters;
var result = new { s = sa, l=l[0].Column};
return Json(result, JsonRequestBehavior.AllowGet);
}
public class Lines
{
public string Column { get; set; }
public string Table { get; set; }
}
我尝试将线绑定到一个对象,就像其中一个链接中的解决方案一样,但是得到了
用户代码未处理 NullRefrenceException
而其他参数接收适当的 data,但我无法访问对象的属性。
我做错了什么,如何解析数据或将其绑定到对象?
【问题讨论】:
-
请向我们展示
Lines类的代码。此外,您不能像那样使用object[] columns(过滤器也是如此)。您需要使用YourConcreteClass[] columns。 -
删除
JSON.stringify()调用。您实际上是在这些属性中双重包装 JSON,因为 jQuery 将在发送之前序列化整个对象 -
Lines 类的代码在控制器下面,但是使用类给了我 NullReference 错误。与此同时,我会尝试你的建议
-
删除
JSON.stringify()使数据成为对象而不是 JSON
标签: c# jquery json asp.net-mvc asp.net-mvc-4