2017-07-19 70 views
0

我使用ASP MVC 5. 我嘗試從服務器上的客戶端向操作方法發送數據。操作方法被觸發,但傳遞參數的值爲空

這裏是我發送的數據:

var layer = { 
       layeType:"Vector" 
       layerName:"aaaa" 
       mapId:5 
       } 

這裏是AJAX方法:

function saveLayer(layer, callback, error) { 
    return $.ajax({ 
     url: '/Mobile/Layer/SaveLayer', 
     type: "GET", 
     async: false, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     data: { layer: layer }, 
     success: callback, 
     error: error 
    }); 

下面是操作方法:

public JsonResult SaveLayer(string layer) 
     {   
      return Json(new { Result = "OK" }, JsonRequestBehavior.AllowGet); 
     } 

的操作方法被觸發,但圖層的值爲空。

任何想法爲什麼值爲空以及如何解決它?

回答

1

好的,

首先,您正試圖通過GET請求發送一個複雜的對象。 GET請求沒有正文,它們僅限於通過Url傳輸數據,所以它需要是查詢字符串參數。其次,遵循其他慣例,GETs是冪等的,因爲每個動作不應該有副作用,重複調用它應該會得到相同的結果。

我會將您的方法切換到POST,因爲這會更準確地表明您將對服務器造成副作用。

完成之後,我會在C#中創建一個與您傳入的json結構相匹配的模型,然後您將獲得一個值。

public class Layer 
{ 
    public string LayeType {get;set;} 
    public string LayerName {get;set;} 
    public int MapId {get;set;} 

} 

的Javascript

function saveLayer(layer, callback, error) { 
return $.ajax({ 
    url: '/Mobile/Layer/SaveLayer', 
    type: "POST", 
    async: false, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    data: { layer: layer }, 
    success: callback, 
    error: error 
}); 

功能

public JsonResult SaveLayer(Layer layer) 
{   
    return Json(new { Result = "OK" }, JsonRequestBehavior.AllowGet); 
} 

這應該對它進行排序

0

首先 -

建立從GET類型POST

二 -

更改從字符串參數類型爲Object類型,即層

在圖層類的屬性應該符合您所發送的JSON數據。

public JsonResult SaveLayer(Layer layer) 
{   
    return Json(new { Result = "OK" }, JsonRequestBehavior.AllowGet); 
}