【发布时间】:2010-12-18 22:37:29
【问题描述】:
我正在尝试通过tvanfosson 遵循this post 中的示例。 我只是无法让它工作。我认为问题出在我的 JavaScript (?) 上。 我这么说是因为如果我在浏览器中导航到http://localhost:49790/Books/GetBooks/?q=,那么浏览器会下载一个文件,其中包含我期望的格式的信息:
[{"BookName":"Book 1","AuthorName":"Author 1","BookID":2},{"BookName":"Book 2","AuthorName":"Author 2","BookID":3}]
但回到视图上,当我开始在 SearchBox 中输入时,什么也没有发生。没有自动完成。
这是我的看法:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
jQuerySearch
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<script type="text/javascript">
$(document).ready(function() {
$('#SearchBox').autocomplete('/Books/GetBooks', {
dataType: 'json',
max: 25,
minChars: 1,
cacheLength: 1,
mustMatch: true,
formatItem: function(data, i, max, value) {
return value;
},
parse: function(data) {
var array = new Array();
for (var i = 0; i < data.length; i++) {
var datum = data[i];
var display = datum.AuthorName + ' - ' + datum.BookName;
array[array.length] = { data: datum, value: display, result: display };
}
}
});
$('#SearchBox').result(function(event, data, formatted) {
if (data) {
$('#BookID').val(data.BookID);
}
});
$('form').submit(function() {
if (!$('#BookID').val()) {
alert('You must select a book before clicking submit!');
return false;
}
});
});
</script>
<h2>jQuerySearch</h2>
<%using (Html.BeginForm()){%>
<%=Html.TextBox("SearchBox") %>
<input type='hidden' id='BookID' name='BookID' />
<%}; %>
</asp:Content>
这是我的控制器代码:
public ActionResult GetBooks(string q)
{
var query = db.Books.Where(e => e.Name.Contains(q))
.OrderBy(e => e.Name)
.Select(e => new
{
BookName = e.Name,
AuthorName = e.Author.Name,
BookID = e.BookID
});
return Json(query.ToList());
}
我对这一切都很陌生。任何帮助表示赞赏。
谢谢。
【问题讨论】:
-
我没有看到任何 JS 错误。这是另一个处理解析方面的类似帖子:stackoverflow.com/questions/529652/…
-
好的,我明白了。没有 JS 错误,因为自动完成从未执行。我不得不将 $('#SearchBox') 更改为 $('input#SearchBox')。我还必须添加“返回数组;”正如 dcneiner 指出的那样。
标签: c# jquery asp.net-mvc autocomplete