[英]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.