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