为什么从网络用户界面发送的数字到达我的MVC应用程序为' null;?

时间:2016-05-26 09:28:26

标签: angularjs json asp.net-mvc serialization asp.net-mvc-5

我发送了一个jQuery Ajax请求:

$scope.geo.setSuburbs2 = function(areaId) {
    var idData = JSON.stringify({ 'areaId': 3, 'agentId': 1 });

    $.ajax({
        url: "/Area/SuburbsJson",
        method: "POST",
        data: idData,
        dataType: "ajax"
    }).then(function(idData) {
            alert("Done!");
        },
        function(data, status) {
            alert("Error: " + status);
        });
};

这应该是由ID为AreaId的代理提供服务的ID为agentId的郊区。返回的郊区是viewmodel上数组中的键值对。当我在控制器上收到模型时,数组中的所有键仍然正确,但所有数值都是null

当我从data来自$.ajax来电时发送{ 'areaId': 3, 'agentId': 1 } 选项时,

OnActionExecuting

我在Web应用程序中获得了相同大小的键值数组,在控制器的{ 'areaId': null, 'agentId': null } 中,上面的数组项如下所示:

JsonDotNet

我强烈怀疑浏览器上存在序列化问题,因为空值尚未到达我的JsonDotNet自定义(来自Web)序列化程序。当我将数据发送回用户界面时,我通常只使用它来改善POST共振中的序列化。

这是一个已知的问题,还是我必须在List<CheckListItemModel>序列化器上查看所有设置,一个很长的列表?如果这是一个已知问题,我该怎么办呢?

视图模型为public class CheckListItemModel { public int Id { get; set; } public string Label { get; set; } public bool IsChecked { get; set; } } ,其中:

null

我没有使用序列化视图模型在控制器和UI之间进行通信,我只是将UI Angular控制器函数传递给列表的过滤器ID,然后返回序列化列表,所有数值都设置为{ {1}}。

将正确数据发送到UI的操作是:

public JsonResult SuburbsJson(int areaId, int agentId)
{
    var allBurbs = _areaClient.GetSuburbs(areaId).ToList();
    var agentBurbIds = _agentClient.GetAgentSuburbs(agentId).Select(s => s.SuburbId).ToList();
    var model = new List<CheckListItemModel>();
    foreach (var burb in allBurbs)
    {
        model.Add(new CheckListItemModel { Id = burb.SuburbId, Label = burb.SuburbName, IsChecked = agentBurbIds.Contains(burb.SuburbId) });
    }
    return Json(model, JsonRequestBehavior.DenyGet);
}

这是IdIsChecked的问题。如果其Id位于与该SuburbId相关联的代理列表中,则已检查该项。

1 个答案:

答案 0 :(得分:1)

  

JSON.stringify()方法将JavaScript值转换为JSON   串,

重新检查您的有效负载构造。你需要将实际的JavaScript对象字符串化,如...

$scope.geo.setSuburbs2 = function(areaId) {
       var value = { areaId: 3, agentId: 1 }; //Object to be sent to controller
       var idData = JSON.stringify(value);

    $.ajax({
        url: "/Area/SuburbsJson",
        type: "POST",
        contentType: 'application/json',
        dataType: 'json',
        data: idData            
    }).then(function(idData) {
            alert("Done!");
        },
        function(data, status) {
            alert("Error: " + status);
        });
};

删除键上的单引号。另请注意对请求如何对控制器进行的更改。