在 Select2 中加载远程数据

Loading Remote Data in Select2

我正在使用 Select2's Loading Remote Data Functionality。问题是数据没有加载到 dropdownlist。按键时 remote function 被调用并且数据正确返回,但它不是显示在下拉列表中。

HTML

<div class=" form-group col-md-4" data-url="@Url.Action("GetStudentWalkInnName")" id="WalkinnName">
 <div>
    <label for="txtEmployee" class=" control-label">
                      Name
    </label>                               
 </div>
  <div>
        <select class="form-control " id="ddlName"></select>
  </div>                    
</div>

Jquery

//REGISTRATION=>INDEX.JS
$(function () {

var ddlNameUrl=$("#WalkinnName").data("url");
$("#ddlName").select2({
    placeholder: "Search for Name",
    minimumInputLength: 1,
    ajax: { // instead of writing the function to execute the request we use Select2's convenient helper
        url: ddlNameUrl,
        type: "POST",
        dataType: 'json',
        data: function (params) {
            return {
                term: params.term, // search term
                page: params.page
            };
        },
        processResults: function (data, params) {

            params.page = params.page || 1;

            return {
                results: data,

            };
        }

    }
});

});

控制器是

 public JsonResult GetStudentWalkInnName(string term)
    {
        try
        {
            var walkInnNameList = _db.StudentWalkInns
                                .Where(s => s.CandidateName.StartsWith(term))
                                .Select(x => new
                                {
                                    Id=x.Id,
                                    Text=x.CandidateName
                                }).ToList();
            return Json(walkInnNameList, JsonRequestBehavior.AllowGet);

        }
        catch (Exception ex)
        {
            return Json("", JsonRequestBehavior.AllowGet);
        }
    }

任何帮助将不胜感激。

根据 documentation,如果数据的格式应该是名称为 idname 的对象数组,即小写(而不是 IdName).

将您的查询更改为

var walkInnNameList = _db.StudentWalkInns
    .Where(s => s.CandidateName.StartsWith(term))
    .Select(x => new
    {
        id = x.Id,
        text = x.CandidateName
    }); // .ToList() should not be necessary