我写了这个ajax函数:
$(function () {
$("#showReport").click(function () {
var data = [];
for (var i = 0; i <@Model.LiFilters.Count;i++) {
data[i] = $("#filter" + i).val();
$("#myDiv").html("Hello!");
}
alert('{filters:' + JSON.stringify(data) + '}');
$("#myDiv").remove();
$.ajax({
type: "POST",
url: '@Url.Action("ShowReport", "Report")',
traditional: true,
//data: '{filters:' + JSON.stringify(data) + '}',
data: { filters : data },
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
alert(data);
alert(response[0]);
$("#myDiv").html(response[0]);
alert(response);
},
failure: function (response) {
alert(response.responseText);
},
error: function (response) {
alert(response.responseText);
}
});
return false;
});
});
在报表控制器中执行此操作:
[HttpPost]
public JsonResult ShowReport(string[] filters)
{
C_AminReport aminReport = null;
string sErr = string.Empty;
//C_ReportParams aminParams = null;
//C_AminReport aminReport;
string sReport = "Empty Report!";
if (C_AminReport.U_GetReport(aminReport.ID, out aminReport))
{
int iConIndex = Get_ServiceIndex();
aminReport.U_RenderReport(iConIndex, ref sErr);
aminReport.U_GetReportFromAmin(iConIndex, aminReport, out sReport, ref sErr);
}
string[] asReport;
JsonBuilder.U_TryReadJson(sReport, out asReport);
return Json(asReport);
}
但是当运行代码时,我看到数据数组已经填充但是在ShowReport操作中,fillters数组是一个空数组而没有填充! 我也在动作参数内尝试[FromBody]标签,但它不起作用! 有什么问题?
答案 0 :(得分:2)
我测试了你的JavaScript,它正在尝试发送查询字符串中的所有数据。
您必须使用JSON.stringify
。其中一个应该有效:
data: '{filters:' + JSON.stringify(data) + '}'
或
data: JSON.stringify(data)
我怀疑它是第二个可行的。
您可能仍需要[FromBody]
。
答案 1 :(得分:1)
你不发送一个数组,但是一个带有属性&#39;过滤器的对象&#39;那是一个数组。
{filters:["1","2","3","4","5","6","7"]}
正如你在评论中指出的那样:)
尝试直接发送数组:
$.ajax({
type: "POST",
url: '@Url.Action("ShowReport", "Report")',
traditional: true,
//data: '{filters:' + JSON.stringify(data) + '}',
data: data, // <=== !!
contentType: "application/json; charset=utf-8",
添加属性[FromBody]也不错: - )
答案 2 :(得分:1)
我正在健身房的手机上打字,很抱歉打字错误和语法不好。我通常喜欢强烈输入控制器的输入参数。因此,您可以string [] filters
而不是FilterList filters
,而FilterList
定义为public FilterList
{
public List<string> filters {get; set;}
}
,例如
{{1}}