Я реализовал функцию автозаполнения Ajax в своем приложении, используя файл веб-сервиса, который запрашивает мою базу данных, и он прекрасно работает. Одна из проблем, с которыми я сталкиваюсь, - это позволить пользователю видеть имя элемента, так как это то, что он печатает в текстовом поле, но когда он выбирает его, он сохраняет идентификационный номер элемента вместо фактического имени. Я хочу, чтобы он вел себя подобно выпадающему списку, в котором я могу указать, что будет видно и введено, а не то, что фактически сохраняется в базе данных (в данном случае идентификатор продукта вместо его имени).
У меня есть это текстовое поле, а также скрипт:
<script type="text/javascript">
Sys.Application.add_init(function() {
$create(
AjaxControlToolkit.AutoCompleteBehavior, {
serviceMethod: 'ProductSearch',
servicePath: '/ProductService.asmx',
minimumPrefixLength: 1,
completionSetCount: 10
},
null,
null,
$get('ProductID'))
});
</script>
<p>
<label for="ProductID">Product:</label>
<%= Html.TextBox("ProductID", Model.Products)%>
<%= Html.ValidationMessage("ProductID", "*")%>
</p>
Вот что в моем файле asmx:
public class ProductService : System.Web.Services.WebService
{
[WebMethod]
public string[] ProductSearch(string prefixText, int count)
{
MyDataContext db = new MyDataContext();
string[] products = (from product in db.Products
where product.ProductName.StartsWith(prefixText)
select product.ProductName).Take(count).ToArray();
return products;
}
}
Может кто-нибудь помочь мне понять это? Я использую это, чтобы они могли просто начать печатать вместо выпадающего списка длиной в милю ...