[英]Ajax AutoComplete Search Doesn't Show Results
我正在尝试实现我的第一个快速搜索功能,该功能会在您键入时在下拉菜单中显示可能的结果。 我想我真的很亲近。 但是由于某些原因,快速结果只是不会在浏览器中显示。
这是视图中的代码:
@using (Ajax.BeginForm("Search", "Home", new AjaxOptions
{
HttpMethod = "GET",
InsertionMode = InsertionMode.ReplaceWith,
UpdateTargetId = "searchResults"
}))
{
<input type="text" name="q" data-autocomplete="@Url.Action("QuickSearch", "Home")" />
<input type="submit" value="Search" />
}
<table id="searchResults"></table>
然后发送到浏览器的HTML:
<form action="/Home/Search" data-ajax="true" data-ajax-method="GET" data-ajax-mode="replace-with" data-ajax-update="#searchResults" id="form0" method="post">
<input type="text" name="q" data-autocomplete="/Home/QuickSearch" class="ui-autocomplete-input" autocomplete="off" role="textbox" aria-autocomplete="list" aria-haspopup="true">
<input type="submit" value="Search">
</form>
<table id="searchResults"></table>
我可以在查询数据库的控制器中的方法上设置一个断点,然后使用Watch可以看到,每次按一下键都可以返回准确的结果:
public ActionResult QuickSearch(string term)
{
var restaurants = _db.Restaurants
.Where(r => r.Name.Contains(term))
.Take(10)
.Select(r => new { label = r.Name });
return Json(restaurants, JsonRequestBehavior.AllowGet);
}
最后,这是应该将它们结合在一起的JavaScript:
/// <reference path="jquery-1.4.4-vsdoc.js" />
/// <reference path="jquery-ui.js" />
/// <reference path="jQuery.tmpl.js" />
$(document).ready(function () {
$(":input[data-autocomplete]").each(function () {
$(this).autocomplete({ source: $(this).attr("data-autocomplete") });
});
$(":input[data-datepicker]").datepicker();
$("#searchForm").submit(function () {
$.getJSON($(this).attr("action"), // the url to get JSON from
$(this).serialize(), // make q=yellow, for example
function (data) { // what to do with the response
var result = $("#searchTemplate").tmpl(data);
$("#searchResults").empty()
.append(result);
}
);
return false;
});
})
我包括脚本:
<script src="/Scripts/jquery-1.10.2.js"></script>
<script src="/Scripts/respond.js"></script>
<script src="/Scripts/jquery-ui.js"></script>
<script src="/Scripts/jquery.unobtrusive-ajax.js"></script>
另外...这可能是同一问题的一部分...不仅快速结果不显示在屏幕下方的下拉菜单中,而且当我单击“搜索”时,结果显示在空白屏幕中,而不显示在原始视图符合预期。
在您的示例中,您从Controller返回带有property
object
,而jQuery自动完成功能不理解它。
更改此:
.Select(r => new { label = r.Name });
对此:
.Select(r => r.Name );
一切都会正常
如果您想更进一步,那么有一个叫做Select2的插件可能会有用。
我有一个回答的问题,这里包含一个数据库,涵盖了实现(JS和控制器):
我的解决方案涵盖了您在实现过程中使用的许多相同基础。 希望能帮助到你!
原来,问题出在jquery文件之间。 我下载了最新版本的jquery,jquery-ui和jquery.unobtrusive,然后它起作用了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.