2017-07-19 71 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); 
}