触发了操作方法,但传递的参数值为 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);
}
我使用 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);
}