簡體   English   中英

通過AJAX傳遞給控制器​​的列表為空

[英]List passed to controller via AJAX is null

我正在嘗試將一個objects List傳遞回我的controller ,但是當它到達controller時, Listnull 這是我正在做的事情:

控制器動作簽名

[HttpGet]
public ActionResult SaveSpec(IEnumerable<DpvItemLiteVm> alarms){}

查看模型

public class DpvItemLiteVm
    {
        public string Location { get; set; }
        public string Program { get; set; }
        public string DeviceType { get; set; }
        public string PartName { get; set; }
        public string RoutineId { get; set; }
        public string FtrName { get; set; }
        public string FtrAttCode { get; set; }
        public decimal LowVal { get; set; }
        public decimal HiVal { get; set; }
        public decimal? TargetVal { get; set; }
    }

而觀點

var alarms = [];

$('#featureSpecGrid tr').each(function () {
     var $tds = $(this).find('td');
     var target = $tds.eq(4).text() === '' ? null : parseFloat($tds.eq(4).text());
     var temp = {
          Location: location,
          Program: program,
          DeviceType: device,
          PartName: part,
          RoutineId: routine,
          FtrName: $tds.eq(0).text(),
          FtrAttCode: $tds.eq(1).text(),
          LowVal: parseFloat($tds.eq(2).text()),
          HiVal: parseFloat($tds.eq(3).text()),
          TargetVal: target
     };
     alarms.push(temp);
});

//alarms = JSON.stringify({ 'alarms': alarms });

//console.log(alarms);

$.ajax({
     type: 'GET',
     cache: false,
     contentType: 'application/json',
     url: '/Dpv/SaveSpec',
     data: alarms
}).done(function (partialViewResult) {
     $('#statusMsg').html(partialViewResult);
}).always(function(result) {
     console.log(result);
});

我試過這個答案這個答案這個答案 (僅舉幾例); 如果我使用JSON.stringify (正如一些答案所示)我得到了404響應。 我也嘗試使用List而不是IEnumerable ,使我的View Model更小(位置,程序,設備,部件和例程對於每個被傳回的項目是相同的)並相應地設置AJAX(返回404錯誤) 。 如果我設法將其返回到controller ,則Listnull

以下是有效負載的示例,如果我將其stringify{"alarms":"Location":"ABC123","Program":"1A2B","DeviceType":"Device","PartName":"Part1","RoutineId":"ABC456","FtrName":"Feature1","FtrAttCode":"CodeA","LowVal":-1.01,"HiVal":1.01,"TargetVal":null}

如果我沒有stringify

[object Array] 0 Location:"ABC123" Program:"1A2B" DeviceType:"Device" PartName:"Part1" RoutineId:"ABC456" FtrName:"Feature1" FtrAttCode:"CodeA" LowVal:-1.01 HiVal:1.01 TargetVal":null 1

有人可以幫忙嗎?

使用contentType: 'application/json' ,您需要將數據作為JSON字符串發送,以便模型綁定器能夠映射它。

您應該通過POST方法發送復雜數據,而不是GET。 GET方法適用於發送具有少量屬性的小型平面視圖模型。 這些將通過$.ajax方法作為查詢字符串發送。 在您的情況下,您的數據不是平坦的視圖模型。 因此,您應該使用POST作為方法,以便$.ajax將在請求正文中發送數據。

我還建議您使用Url.Action幫助器方法為action方法生成正確的相對URL。

var urlToSave="@Url.Action("SaveSpec","Dpv")";
// use urlToSavefor the ajax call 

$.ajax({
     type: 'POST',       
     contentType: 'application/json',
     url: urlToSave,
     data: JSON.stringify(alarms)
}).done(function (partialViewResult) {
     $('#statusMsg').html(partialViewResult);
}).always(function(result) {
     console.log(result);
});

還要確保你的aciton方法是POST

[HttpPost]
public ActionResult SaveSpec(IEnumerable<DpvItemLiteVm> alarms)
{
    // to do : return something
}

現在,模型綁定器將能夠讀取請求主體並將其映射到您擁有的IEnumerable<DpvItemLiteVm>參數。

暫無
暫無

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

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