2014-10-16 56 views
2

已經嘗試了找到的方法,但仍然無法解決問題。 上午通過Jquery Aja傳遞對象列表,但似乎控制器正在接收空值(這是承認列表計數罰款)。asp mvc控制器從ajax接收空值

jquery的代碼如下:

var xmlids = Array(); 

     for (var i = 0; i < orderId.length; i++) { 
      var xdata = { 
       "XmlOid": "" +orderId[i] + "", 
       "CourierCompany": $("#CourierCompany_"+orderId[i]).val() , 
       "CourierService": $("#CourierService_" + orderId[i]).val(), 
       "StoreId" : storeId 
      }; 
      xmlids.push(xdata); 
     } 

var data = { invoices: xmlids }; 


     $.ajax({ 
      url: purl, 
      type: "POST", 
      dataType: "json", 
      //contentType: "application/json;", 
      async: false, 

      data: data, 

控制器參數是:

public JsonResult ProcessSaleOrder(List<XMLInvoiceGeneration> invoices)

對象如下:

public class XMLInvoiceGeneration 
    { 
     public Int64 XmlOid { get; set; } 
     public string CourierCompany { get; set; } 
     public string CourierService { get; set; } 
     public Int64? StoreId { get; set; } 
    } 

任何幫助理解。

+0

您可以使用DevTools進行檢查(單擊瀏覽器中的F12並打開網絡監視)通過ajax調用發佈了什麼? – 2014-10-16 19:40:00

+0

有沒有理由在你的javascript中引用XmlOid?嘗試刪除它,然後運行它。 – Gjohn 2014-10-16 19:46:29

+0

已經記錄了我的控制檯陣列,它具有正確設置的所有值。 @Gjohn補充說,只是爲了讓int成爲一個字符串。但問題是相同的或不相同 – 2014-10-16 20:07:37

回答

1

試試這個 取消註釋//的contentType: 「應用/ JSON;」

和發送數據與JSON.stringify(data)

data: JSON.stringify(data) 

PS:網址最佳實踐:url: "@Url.Action("method","controller")"

+0

謝謝你的答案。答案似乎工作80%。以下工作: contentType:「application/json; charset = utf-8;」然後嚴格數據 – 2014-10-17 08:20:22

3

我試圖複製你的問題。

我創建了一個新的ASP.NET MVC的Web應用程序,並在家庭控制器的索引視圖,我增加了以下

<input type="button" id="send" value="Send" /> 
@section scripts{ 
    <script type="text/javascript"> 
     $(function() { 
      $("input#send").on("click", function() { 
       var xmlids = Array(); 

       for (var i = 0; i < 2; i++) { 
        var xdata = { 
         "XmlOid": 1, 
         "CourierCompany": "TempData", 
         "CourierService": "Temp", 
         "StoreId": 2 
        }; 

        xmlids.push(xdata); 
       } 

       var data = { invoices: xmlids }; 

       $.ajax({ 
        url: "/Home/ProcessSaleOrder", 
        type: "POST", 
        dataType: "json", 
        async: false, 
        data: data 
       }); 
      }); 
     }) 
    </script> 
} 

我基本上創建了一些臨時數據,但嘗試仍然使用原來的想法。我的控制器看起來是這樣的:

[HttpPost] 
public ActionResult ProcessSaleOrder(List<XMLInvoiceGeneration> invoices) 
{ 
    return new EmptyResult(); 
} 

當我點擊按鈕,命中斷點在控制器中,invoices參數包含2項,都與我的JavaScript代碼設置的值。我不確定爲什麼你的代碼不工作,但也許你可以用我的模板來幫助你縮小問題的範圍。

1

我有關於向控制器發送List的相同問題。經過很多努力,我找到了它發送爲空的原因。它是返回類型(類)的字段,不會與{get;組; }

$.ajax({ 
      url: "/Home/CreateTasks", 
      data: ko.toJSON({Id: this.Id, tasks: objList }),    
      type: "POST", 
      dataType: "json", 
      processData: true, 
      contentType: "application/json; charset=utf-8", 
      success: data => { 
} 

我的模型類是: 它之前之後

public class TaskFields 
{ 
    public string Title { get; set; } 
    public string Activity { get; set; } 
} 
public class CreateTaskInput 
{ 
    public int Id { get; set; } 
    public TaskFields TaskProperties { get; set; } 
} 

public class TaskFields 
{ 
    public string Title; 
    public string Activity; 
} 
public class CreateTaskInput 
{ 
    public int Id; 
    public TaskFields TaskProperties; 
} 

和我的控制器方法是:

[HttpPost] 
public JsonResult MethodName(int Id, List<CreateTaskInput> tasks) 
{ 
} 

我不是肯定這個答案會成功你呢。但它可能會幫助有類似錯誤的人。謝謝!