3

我在一个 asp mvc 项目中使用 select2 v4.0 https://select2.github.io/,我想从动态数据中显示一个简单的下拉列表

3.6 版的旧方式不再适用:

我有 ac# 方法:

public JsonResult GetSrcMethod()
 {
            var list = new[]
            { 
                new { id= 0, text= "Smith" },
                new { id= 1, text= "John" }, 
                new { id= 2, text= "Philippe" },    
            }.ToList();

            Object json = JsonConvert.SerializeObject(list);
            return Json(json, JsonRequestBehavior.AllowGet);   
 }

因此,返回的数据是:

[{"id":0,"text":"Smith"},{"id":1,"text":"John"},{"id":2,"text":"Philippe"}]

我有一个适用于以前版本 3.6 的 javascript 代码:

$(".example-select2").select2({
        ajax: {
            dataType: 'json',
            url: '@Url.Action("GetSrcLanguages", "GetCheckSet")',
            results: function (data) {
                return {results: data};
            }              
        }
    });

它呈现一个空的下拉列表,显示“未找到结果”

你知道如何在 v4.0 中做到这一点吗?

4

1 回答 1

3

Id与 不同id,JavaScript 对象的属性区分大小写。Text这同样适用于text您想要使用全小写版本。

public JsonResult GetSrcLanguages()
        {
            var list = new[]
            { 
                new { id = 0, text = "Smith" },
                new { id = 1, text = "John" }, 
                new { id = 2, text = "Philippe" },    
            }.ToList();

            Object json = JsonConvert.SerializeObject(list);
            return Json(json, JsonRequestBehavior.AllowGet);   
        }

此外,该ajax.results方法已重命名为ajax.processResults4.0.0 以避免与具有现有results方法的 AJAX 传输冲突。所以你的 JavaScript 实际上应该看起来像

$(".example-select2").select2({
    ajax: {
        dataType: 'json',
        url: '@Url.Action("GetSrcLanguages", "GetCheckSet")',
        processResults: function (data) {
            return {results: data};
        }              
    }
});
于 2015-07-19T20:28:08.730 回答