Надеюсь, это кому-нибудь поможет ...
Мне пришлось добавить библиотеки jquery-ui и таблицы стилей, потому что они не поставлялись с шаблоном VS2013 Scripts. Вот пример автозаполнения с помощью db query и TextBoxFor, который работал для меня:
WordListController.cs:
public ActionResult Test2(MyModel vm)
{
return View(vm);
}
public JsonResult AutoComplete(string search)
{
var result = (from r in db.Words
where r.Word.ToLower().StartsWith(search.ToLower())
select r.Word).Take(10).ToArray();
return Json(result, JsonRequestBehavior.AllowGet);
}
Test2.cshtml:
@{
ViewBag.Title = "test2";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@Scripts.Render("~/bundles/jqueryui")
@Styles.Render("~/Content/jqueryuicss")
@model WLWeb.Models.MyModel
<h2>test2</h2>
<script>
$(function () {
$('#tags').autocomplete({
source: function (request, response) {
$.ajax({
url: '@Url.Action("AutoComplete", "WordList")',
dataType: "json",
contentType: 'application/json, charset=utf-8',
data: {
search: $("#tags").val()
},
success: function (data) {
response($.map(data, function (item) {
return {
label: item
};
}));
},
error: function (xhr, status, error) {
alert(error);
}
});
},
minLength: 2
});
});
</script>
@Html.TextBoxFor(x => Model.SelectionModel.SearchString, new { @id = "tags", style = "width:120px;" })
Layout.csthml:
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewBag.Title - My ASP.NET Application</title>
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
</head>
<body>
...
@Scripts.Render("~/bundles/bootstrap")
@RenderSection("scripts", required: false)
</body>
</html>
BundleConfig.cs:
...
bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
"~/Scripts/jquery-ui-{version}.custom.js"));
bundles.Add(new StyleBundle("~/Content/jqueryuicss").Include(
"~/Content/jquery-ui-{version}.custom.css"));