在我的ASP MVC视图中,我从控制器传回一个键/值对。在查看提琴手并在Chrome的调试器中查看后,我可以看到信息正在被正确传回。
我希望键/值对的value
成为autocomplete
列表中显示的项目。当用户从列表中选择一个项目时,我希望将该项目的key
放入文本框中。
以下是我视图中的jQuery代码
$(function () {
$('#DRMCompanyId').autocomplete({
source: '@Url.Action("compSearch", "AgentTransmission")',
minLength: 2,
select: function (event, ui) {
$('#DRMCompanyId').val(ui.item.label);
}
});
});
我注意到的一件事 - 如果我将ui
变量添加到浏览器调试器的监视列表中,我会注意到标签和值完全相同。但是,我再次看到返回的是完整的键/值对。
以下是搜索完成后网络/响应控制台的屏幕截图。有些数据是私有的,所以我把它涂黑了但是你可以看到有一个键/值对返回。
答案 0 :(得分:13)
您需要自己制作AJAX请求并将数据转换为jQueryUI期望的格式:
$(function () {
$('#DRMCompanyId').autocomplete({
source: function (request, response) {
$.ajax({
url: '@Url.Action("compSearch", "AgentTransmission")',
type: 'GET',
dataType: 'json',
data: request,
success: function (data) {
response($.map(data, function (value, key) {
return {
label: value,
value: key
};
}));
}
});
},
minLength: 2
});
});
此外,当选择该项时,自动填充项的value
属性会自动放在input
中,因此不需要自定义select
处理程序。
答案 1 :(得分:0)
同上,详细说明
前端
<input id="CompanySearch" type="text" />
<script>
$(function () {
$("#CompanySearch").autocomplete({
source: function (request, response) {
$.ajax({
url: '@Url.Action("GetCompanyAutoComplete", "Admin")',
dataType: "json",
data: { term: request.term },
success: function (data) {
response(data);
}
});
},
minLength: 2
});
});
</script>
C#
public JsonResult GetCompanyAutoComplete(string term)
{
var search = term.Trim();
var itemList = (from items in db.TblProductSuggestionFirsts where items.Name.StartsWith(search) select new { label = items.Name, value = items.Name }).Take(50).ToList();
return Json(itemList, JsonRequestBehavior.AllowGet);
}
Json结果格式