我需要创建一个自动完成文本框来填充 ASP.Net MVC 应用程序中的客户名称。我认为的jQuery代码如下:
$(document).ready(function() {
$("input#bldCustomerName").autocomplete({
source: '<%= Url.Action("ListCustomers","Build") %>'
});
});
我的 Controller 操作是:
public ActionResult ListCustomers(string term)
{
IList<HSTrader> lstTraders = new List<HSTrader>();
Build objBld = new Build();
string trdrType = Resources.Resource.TraderTypeCustomer;
int trdrTypeId = objBld.GetTraderTypeByTraderTypeName(trdrType).Id;
lstTraders = objBld.GetTradersByTraderType(trdrTypeId);
var results = from m in lstTraders
where m.TraderName.StartsWith(term)
select m.TraderName; //new { label = m.TraderName, id = m.Id };
return Json(results.ToArray(), JsonRequestBehavior.AllowGet);
}
在按键
上, Controller 操作被执行,但列表不会出现在文本框下。我的实现有什么问题?
最佳答案
$(document).ready(function () {
$('input#bldCustomerName').autocomplete({
source: function (request, response) {
$.ajax({
url: '/Build/ListCustomers', type: 'Get', dataType: 'json',
data: { term: request.term, maxResults: 10 },
success: function (data) {
response($.map(data, function (item) {
return { label: item.TraderName, value: item.TraderName, id: item.TraderName }
//return { label: item.d, value: item.d, id: item.d }
//If it does not work then use this line. comment above line. it is for single dimension array (only one column.).
}))
}
});
},
select: function (event, ui) {
}
});
});
//BuildController
[HttpGet]
public JsonResult ListCustomers(string term, int maxResults)
{
IList<HSTrader> lstTraders = new List<HSTrader>();
Build objBld = new Build();
string trdrType = Resources.Resource.TraderTypeCustomer;
int trdrTypeId = objBld.GetTraderTypeByTraderTypeName(trdrType).Id;
lstTraders = objBld.GetTradersByTraderType(trdrTypeId);
var results = from m in lstTraders
where m.TraderName.StartsWith(term)
select m.TraderName; //new { label = m.TraderName, id = m.Id };
return Json(results.Take(maxResults).ToList(), JsonRequestBehavior.AllowGet);
}
关于jquery - 在 asp.net mvc 中使用 jquery 自动完成文本框的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8254514/