触发了操作方法,但传递的参数值为 null

The action method is fired, but value of the passed parameter is null

我使用 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);
        }

动作方法已触发,但层的值为空。

知道为什么值为 null 以及如何解决它吗?

好的,

首先,您试图通过 GET 请求发送一个复杂的对象。 GET 请求没有正文,它们仅限于通过 Url 传输数据,因此它需要是一个查询字符串参数。

其次,遵循剩余约定,GET 是幂等的,因为每个操作不应该有副作用,重复调用它应该产生相同的结果。

我会将您的方法切换为 POST,因为这样会更准确地表明您将对服务器造成副作用。

完成后,我将在 C# 中创建一个与您传入的 json 结构相匹配的模型,然后您将获得一个值。

Class

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);
}

应该排序

第一 -

使类型从 GET 变为 POST

第二 -

将参数类型从string改为Object类型,即Layer

层 class 中的属性应该与您发送的 json 数据匹配。

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