【问题标题】:Json return form Controller are not workingJson 返回表单控制器不起作用
【发布时间】:2015-08-18 08:05:00
【问题描述】:

我需要从字符串中获取json对象并从控制器返回。

在我的控制器中,我有第二件事:

    [HttpGet]
    public JsonResult GetPageFilters()
    {
        ...
        ...

        if (settings != null)
        {
            var data = JsonConvert.DeserializeObject(settings.Filters); //Filter is string with json

            return Json(data);
        }
        else
        {
            return null;
        }            
    }

在我看来:

    var filterOption;

    $.get('Library/Books/GetPageFilters', null, function(data) {
        filterOption = data;
    }, "json");

控制器正常调用,字符串反序列化为对象...但function(data) 不起作用。那里什么都没有发生,我不明白为什么。

我错过了什么?

编辑:

看起来 json 的字符串出错了。 我试图将它保存在数据库中,我猜它看起来不错,但正确读取它对我来说是个问题。

function UpdateFilter() {

    var filterOption = {
        "filterTarget": "Books",
        "filters": [
            { "cancelled": $("#showCancelledFilter").is(':checked') },
            { "completed": $("#showAllFilter").is(':checked') }
        ],
        "page": page,
        "sorting": sorting
    };

    var url = "Library/Books/UpdateFilter";
    $.post(url, { pageFilters: JSON.stringify(filterOption) }, function (data) { });
}

似乎工作正常,但正如我已经说过的,由于某种原因,从字符串到 json 是不合适的。

【问题讨论】:

  • “什么都没有发生”是什么意思?您是否进入了成功处理程序?
  • 因为它是一个 GET 方法。你需要return Json(data, JsonRequestBehavior.AllowGet);
  • 这是否意味着我实际上不需要[HttpGet]
  • 你可以做到[HttpPost],但你似乎没有更改任何数据,所以 GET 似乎更合适
  • 谢谢,您能否将您的评论作为答案,以便我标记它? Aslo ...我看到了数据...但看起来反序列化出错了(我有一个4个数组(json中每个字段上的数组和每个数组内的空数组)...我将在编辑中描述,我是如何尝试的dave json 在数据库中,然后从字符串中获取它。

标签: c# jquery json asp.net-mvc


【解决方案1】:

您的方法标有[HttpGet],这意味着您需要将方法更改为

return Json(data, JsonRequestBehavior.AllowGet);

默认情况下,JsonRequestBehavior 设置为 DenyGet

您可以在this question的答案中阅读更多相关信息

【讨论】:

  • 谢谢。如果您有时间,请查看描述将 json 更改为字符串并将其写入数据库的编辑,因为我在反序列化后收到的不是我需要的。 :(
  • 嗯,好吧,这将成为另一个问题:)
【解决方案2】:

您缺少 JsonRequestBehavior.AllowGet

[HttpGet]
    public JsonResult GetPageFilters()
    {
        ...
        ...

        if (settings != null)
        {
            var data = JsonConvert.DeserializeObject(settings.Filters); //Filter is string with json

            return Json(data, JsonRequestBehavior.AllowGet);  
        }
        else
        {
            return Json(null, JsonRequestBehavior.AllowGet);  
        }            
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 2018-04-15
    • 2019-01-04
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多