2017-05-30 67 views
1

我想通過Asp.Net MVC中的Ajax提交頁面輸入。Ajax向控制器動作發送空參數

JQuery Ajax json數據不爲null(在Console.log()中檢查),但它將json字符串null傳遞給控制器​​操作。控制器動作方面的一個目的爲字符串:

類別:

public int ID { get; set; } 
public string ProductName { get; set; } 
public int CategoryID { get; set; } 
public int BrandID { get; set; } 
public int Price1 { get; set; } 
public string Exchange { get; set; } 
public bool State { get; set; } 

控制器:

[HttpPost] 
    public ActionResult AddProduct(string data) 
    { 
     //string data comes null here 
    } 

JQuery的:的console.log的

var xy ={ 
      "data": { 
       CategoryID: categoryID, 
       BrandID: brandID, 
       ProductName: productName, 
       Price1: price1, 
       ExchangeName: exchangeName, 
       State: state 
      } 
     }; 
     console.log(JSON.stringify(xy)) 

     $.ajax({ 
      url: "/Products/AddProduct/", 
      type: 'POST', 
      data: JSON.stringify(xy),   
      async: true, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json",   
      success: function (data) { 

      }, 
      error: function (xhr, status, error) { 
       alert(xhr.responseText) 

      } 
     }); 

輸出(JSON.stringify(XY )):

{"data":{"CategoryID":"63","BrandID":"1","ProductName":"pname","Price1":"199","State":"1"}} 

我檢查了很多答案,但無法弄清楚我的問題。 感謝您的幫助。

+0

console.log(JSON.stringify(xy));'?的輸出是什麼? – Sandman

+0

「AddProduct」方法中有哪些參數? '數據'或'CategoryID'等? –

+0

我更新了我的問題。 AddProduct方面的類參數作爲字符串json數據來自ajax – Zeynep

回答

0

您需要提供您所發送的數據的密鑰的名稱試試這個:

data: { data: JSON.stringify(xy.data) },  

我還建議手動字符串化的數據是你不必要的額外工作。它將使更多的意義在你的C#代碼來創建一個模型,然後讓你的ModelBinder的工作:在動作

data: xy.data, 
// model definition: 
public class Product { 
    public int CategoryID { get; set; } 
    public int BrandID { get; set; } 
    public string ProductName { get; set; } 
    public decimal Price1 { get; set; } 
    public string ExchangeName { get; set; } 
    public string State { get; set; } 
} 

// in your controller: 
[HttpPost] 
public ActionResult AddProduct(Product product) 
{ 
    // work with the hydrated Product class here... 
} 
+0

在您的答案我收到「無效的json原語:數據」間隔錯誤500 – Zeynep

1

需要聲明的所有PARAMS:

[HttpPost] 
public ActionResult AddProduct(int CategoryID, int BrandID, string ProductName, double Price1, string ExchangeName, int State) 
{ 
} 

並通過數據是這樣的:

$.ajax({ 
      url: "/Products/AddProduct/", 
      type: 'POST', 
      data: {CategoryID: categoryID, 
       BrandID: brandID, 
       ProductName: productName, 
       Price1: price1, 
       ExchangeName: exchangeName, 
       State: state},   
      async: true, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json",   
      success: function (data) { 

      }, 
      error: function (xhr, status, error) { 
       alert(xhr.responseText) 

      } 
     }); 
0
data: new{data = JSON.stringify(xy)} 

以這種方式傳遞您的數據