Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 序列化JSON对象在控制器上显示为Null_Javascript_Jquery_Asp.net Mvc 3_Asp.net Mvc Controller - Fatal编程技术网

Javascript 序列化JSON对象在控制器上显示为Null

Javascript 序列化JSON对象在控制器上显示为Null,javascript,jquery,asp.net-mvc-3,asp.net-mvc-controller,Javascript,Jquery,Asp.net Mvc 3,Asp.net Mvc Controller,我有一个字符串化的JSON对象,它在警报中正确显示,在浏览器调试器的post部分正确显示,但在控制器中它显示为null。我不确定它是如何丢失信息的 以下是JS代码: var assessmentStatus = []; $("select.assessmentSelect").each(function () { assessmentStatus.push({ assessmentname: $(

我有一个字符串化的JSON对象,它在警报中正确显示,在浏览器调试器的post部分正确显示,但在控制器中它显示为null。我不确定它是如何丢失信息的

以下是JS代码:

 var assessmentStatus = [];

            $("select.assessmentSelect").each(function () {
                assessmentStatus.push({
                    assessmentname: $(this).attr("id"),
                    assessmentstatus: $(this).val()
                });


            });
alert(JSON.stringify(assessmentStatus));


            $.ajax({
                url: '@Url.Action("testAS")',
                type: "POST",
                contentType: 'application/json',
                data: JSON.stringify({
                    AS: assessmentStatus,
                    AS2: assessmentStatus

                })

            });
这是警报中显示的内容:

[{"assessmentname":"testassessment","assessmentstatus":"Design"},{"assessmentname":"DepressionUpload","assessmentstatus":"Design"}]
以下是帖子中出现的内容:

[Object { assessmentname="testassessment", assessmentstatus="Design"}, Object { assessmentname="DepressionUpload", assessmentstatus="Design"}]
我的控制器如下所示:

public ActionResult testAS (string[] AS, string AS2)

string[] AS returns [0]null  [1]null
string AS2 just returns null.

为什么它在发送到控制器时没有被字符串化?

您不必自己对参数进行编码,因为这看起来像是一个简单的操作。只要将属性交给jQuery对象,它就会为您编码

       $.ajax({
            url: '@Url.Action("testAS")',
            type: "POST",
            contentType: 'application/json',
            data: {
                AS: assessmentStatus,
                AS2: assessmentStatus

            )

        });

对于看似简单的操作,您不必自己对参数进行编码。只要将属性交给jQuery对象,它就会为您编码

       $.ajax({
            url: '@Url.Action("testAS")',
            type: "POST",
            contentType: 'application/json',
            data: {
                AS: assessmentStatus,
                AS2: assessmentStatus

            )

        });

我以前遇到过这种情况。您需要设置jQuery的ajaxSettings.traditional=true。不久前,他们改变了序列化数组的方式。它把asp.NETMVC搞砸了

这个问题说的是:

正如这一点:

因此,只要说:

jQuery.ajaxSettings.traditional = true;

然后按照波蒂说的去做,不要把你的数据串起来。

我以前遇到过这种情况。您需要设置jQuery的ajaxSettings.traditional=true。不久前,他们改变了序列化数组的方式。它把asp.NETMVC搞砸了

这个问题说的是:

正如这一点:

因此,只要说:

jQuery.ajaxSettings.traditional = true;

然后按照Pointy说的做,不要对数据进行字符串化。

您似乎试图传递一个包含两个属性的复杂对象数组:

assessmentStatus.push({
    assessmentname: $(this).attr("id"),
    assessmentstatus: $(this).val()
});
到一个简单的字符串数组:
string[]as
。这显然行不通

因此,从定义视图模型开始:

public class AssessmentViewModel
{
    public string Name { get; set; }
    public string Status { get; set; }
}
然后调整控制器动作:

public ActionResult TestAS(AssessmentViewModel[] assessments)
{
    ...
}
最后是您的javascript:

var assessments = [];
$('select.assessmentSelect').each(function () {
    assessments.push({
        name: $(this).attr("id"),
        status: $(this).val()
    });
});
$.ajax({
    url: '@Url.Action("testAS")',
    type: "POST",
    contentType: 'application/json',
    data: JSON.stringify({ assessments: assessments })
});

您似乎试图传递一个包含两个属性的复杂对象数组:

assessmentStatus.push({
    assessmentname: $(this).attr("id"),
    assessmentstatus: $(this).val()
});
到一个简单的字符串数组:
string[]as
。这显然行不通

因此,从定义视图模型开始:

public class AssessmentViewModel
{
    public string Name { get; set; }
    public string Status { get; set; }
}
然后调整控制器动作:

public ActionResult TestAS(AssessmentViewModel[] assessments)
{
    ...
}
最后是您的javascript:

var assessments = [];
$('select.assessmentSelect').each(function () {
    assessments.push({
        name: $(this).attr("id"),
        status: $(this).val()
    });
});
$.ajax({
    url: '@Url.Action("testAS")',
    type: "POST",
    contentType: 'application/json',
    data: JSON.stringify({ assessments: assessments })
});

返回以下错误:System.ArgumentException:Invalid JSON primitive:AS。

好的,然后检查@Patricia的答案。返回以下错误:System.ArgumentException:Invalid JSON primitive:AS。

好的,然后检查@Patricia的答案。这就成功了!我知道字符串[]看起来不正确,但我不确定如何解决它。谢谢你,达林!这就成功了!我知道字符串[]看起来不正确,但我不确定如何解决它。谢谢你,达林!