我需要使用ajax实现select2,并且我使用this作为示例项目来工作。
这是我到目前为止所拥有的
查看
<div class="form-group">
<div class="col-md-10">
<select class="js-data-example-ajax form-control"></select>
</div>
</div>
$(document).ready(function () {
$('.js-data-example-ajax').select2({
placeholder: 'Enter name',
//Does the user have to enter any data before sending the ajax request
minimumInputLength: 3,
allowClear: true,
ajax: {
quietMillis: 150,
// url: '@Url.Action("GetUsers", "CRMTItems")',
url: '/CRMTItems/GetUsers/' + $('.js-data-example-ajax').text(),
dataType: 'jsonp',
results: function (data) {
console.log('results');
return { results: data.results }
}
// Additional AJAX parameters go here; see the end of this chapter for the full code of this example
}
});
)};
控制器
public JsonResult GetUsers(string term)
{
var users = CRMTItemViewModel.AllUsers.Where(u => u.DisplayName.Contains(term));
var userList = AttendeesToSelect2Format(users, 10);
return Json(userList, JsonRequestBehavior.AllowGet);
}
我可以看到搜索词被传入并且数据被过滤,但是当它被发送回视图时我只看到
我尝试完全复制示例项目,但后来遇到了进一步的问题:
使用@Html.TextBoxFor
代替<select>
时,我只看到
没有select2 / compat / inputData
在js控制台
完全复制js(使用data
和results
函数)时,我的搜索词永远不会进入控制器,每次都会传递null
。
请有人帮忙解决这个问题我不明白
答案 0 :(得分:0)
正如安德烈亚斯在文章中所说,这是因为
Results !== results
但我不是要更改js,而是需要将Results
中的Select2PagedResult
属性更改为 results
。
我不确定jsonp
,但将其更改为json
似乎没有任何区别,即使该类在代码中被称为JsonpResult
。