【发布时间】:2017-08-30 18:20:39
【问题描述】:
我在查询中使用 (FOR JSON PATH, WITHOUT_ARRAY_WRAPPER) 返回了一些数据。我在我的服务器端(mvc 控制器)调用这个查询来获取 json 数据,所以我以后可以在我的视图中将它加载到 select2 中。
我在我的电影控制器中使用此代码
public async Task<ActionResult> DisplayMovies()
{
Movies [] movieList = await movieStorage.GetAllMovies();
if(Request.IsAjaxRequest())
{
return Json(movieList, JsonRequestBehavior.AllowGet);
}
else
{
return View();
}
}
当我调试这段代码时,调试器会像这样返回 json:
[{"Title": "Shawshank Redemption", "Director": "Frank Darabont", "Genre": "Drama", "ReleaseYear": "1994", "Rating": "9,3"},
{"Title": "Shutter Island", "Director": "Martin Scorsese", "Genre": "Mystery", "ReleaseYear": "2010", "Rating": "8,1"},
{"Title": "Pulp Fiction", "Director": "Quentin Tarantino", "Genre": "Crime", "ReleaseYear": "1994", "Rating": "8,9"}]
这是我的 .js
var myUrl = '@Url.Action("DisplayMovies", "Movies")';
$('.myMovies').select2( {
placeholder: 'Select movie...' ,
minimumInputLength: 1,
ajax: {
url: myUrl,
dataType: 'json',
data: function (term, page) {
return {
searchTerm: term
};
},
results: function (data, page) {
return {results: data};
}
}
});
和html
<select class="myMovies" multiple="multiple">
</select>
但是,当我运行它时,在 chrome 或 firefox 的控制台中没有结果,也没有错误。
如果我将我的电影控制器更改为这样的静态控制器,它会突然起作用:
public async Task<ActionResult> DisplayMovies()
{
var list = new[]
{
new { id = 0, title = "Shawshank Redemption" },
new { id = 1, title = "Shutter Island" },
new { id = 2, title = "Pulp Fiction" },
}.ToList();
if (Request.IsAjaxRequest())
{
Object json = JsonConvert.SerializeObject(list);
return Json(json, JsonRequestBehavior.AllowGet);
}
else
{
return View();
}
}
为什么这行得通,但当我从数据库中获取数据时却不行?错误在哪里?我从数据库中获取的 json 不正确,还是 javascript 代码 - select2 用于显示 json?
请帮忙
【问题讨论】:
-
你的 json 在你的情况下是不同的。您是否尝试过选择一个看起来像有效对象的匿名对象?
-
有什么例子吗?我真的不明白你的意思@Fran
标签: javascript json asp.net-mvc jquery-select2