不能使用带有asp.net核心的ajax发送数组

时间:2018-01-30 13:52:44

标签: jquery asp.net arrays ajax asp.net-core

我写了这个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]标签,但它不起作用! 有什么问题?

3 个答案:

答案 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}}