【发布时间】:2014-02-09 16:40:55
【问题描述】:
我一直在玩 JQuery 自动完成。按照http://www.asp.net/ajaxlibrary/jquery_mvc_autocomplete.ashx上的例子
自动完成组件显示 2 个空白整体(尽管如果我选择一个选项,我用来存储所选 titleID 的隐藏字段将被填充)。
我怀疑我没有正确映射响应,而且我确实很明显地错过了一些东西,但是我终生无法发现它。
控制器方法。
public ActionResult SearchTitle(string term)
{
var results = new List<Models.Title>{ new Models.Title{ Name = "TestResponse1",TitleId=123 }, new Models.Title { Name = "TestResponse2", TitleId=234} };
return Json(results.ToArray(),JsonRequestBehavior.AllowGet);
}
查看
@using (Html.BeginForm())
{
<h3>Add a new subscription</h3>
@Html.TextBox("Name")
@Html.Hidden("TitleId")
<input type="submit" value="Find Title" />
}
@Styles.Render("~/Content/themes/base/css")
<script type="text/javascript">
$("#Name").autocomplete({
source: '@Url.Action("SearchTitle")',
dataType: "json",
messages: { noResults: 'No titles found' },
select: function (event, ui) {
$("#TitleId").val(ui.item.TitleId);
}
});
</script>
谁能发现我做错了什么?
好的,按照该建议,自动完成现在显示值,但是当我从下拉列表中选择一个项目时没有任何反应。谁能发现我错过了什么?
<script type="text/javascript">
$("#Name").autocomplete({
source: '@Url.Action("SearchTitle")',
dataType: "json",
messages: { noResults: 'No titles found' },
focus:function(event,ui){
$("#Name").val(ui.item.Name);
return false;
},
select: function (event, ui) {
$("#Name").val(ui.item.Name)
$("#TitleId").val(ui.item.TitleId);
return false;
}
})
.data("ui-autocomplete")._renderItem = function (ul, item) {
return $("<li>")
.append(item.Name)
.appendTo(ul)
};
</script>
【问题讨论】:
-
您是否在发送之前尝试注销
Json(results.ToArray(),JsonRequestBehavior.AllowGet);?在点击客户端代码之前确保响应是干净的? -
是的,响应是干净的。我在返回行上放了一个断点,还查看了 Chromes 开发者工具中的响应。
标签: c# jquery asp.net-mvc jquery-ui