Json返回表单控制器无法正常工作

时间:2015-08-18 08:05:01

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

我需要从字符串中获取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不是出于某种原因。

2 个答案:

答案 0 :(得分:2)

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

return Json(data, JsonRequestBehavior.AllowGet);

默认情况下,JsonRequestBehavior设置为DenyGet

您可以在this question

的答案中详细了解此信息

答案 1 :(得分:1)

您缺少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);  
        }            
    }