簡體   English   中英

序列化的JSON對象在控制器中顯示為Null

[英]Serialized JSON Object appearing as Null at controller

我有一個字符串化的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.

為什么在發送到控制器時沒有得到字符串化?

您似乎試圖傳遞具有2個屬性的復雜對象數組:

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 })
});

您不必自己編碼參數,看起來像一個簡單的操作。 只需將jQuery與您的屬性一起交給對象,它就會為您編碼。

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

            )

        });

我以前碰到過這個。 你需要設置jQuery的ajaxSettings.traditional = true。 前一段時間,他們改變了序列化數組的方式。 它搞砸了asp.net mvc。

這個問題談到它:

如何在沒有表單的情況下將字符串數組發布到ASP.NET MVC Controller?

就像這樣: http//forum.jquery.com/topic/nested-param-serialization

所以就這樣說:

jQuery.ajaxSettings.traditional = true;

然后就像Pointy說的那樣,並且不要對你的數據進行字符串化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM