我有正确的jquery包含设置我相信,datepicker正在工作。但是,当我在控制器上为自动完成设置断点时,在文本框中键入时它永远不会被激活。我有:
<script type="text/javascript">
$(document).ready(function () {
$("input#sitesearchlist").autocomplete('<%= Url.Action("Filter", "Wos") %>');
});
</script>
其中Filter是控制器Wos上的一个动作:
public ActionResult Filter(string q)
{
var siteList = _sitesRepository.GetSites(q);
return Json(siteList, JsonRequestBehavior.AllowGet);
//return siteList;
}
我意识到应该返回一个简单的列表而不是json与第一个代码段一起使用。最终我需要在数据中设置一个id而不是名称,所以这是一个简单的例子,试图解决当前的问题,这就是当我运行它时,没有从控制器动作中提取数据,当我设置断点时,它会在首次运行时触发,但不会在文本框中输入文本时触发:
<%= Html.TextBox("sitesearchlist") %>
所以我认为java被激活为自动完成,因为在某些时候它似乎缓存了字母'ki',因为如果我输入它们,列表将出现在文本框下方,只有那些字母。但是,当你输入时,动作不会触发。
如果我访问网址,我会得到json数据,如:
[{"SiteId":153,"SiteName":"Name of Site"}]
所以出于某种原因,无论我尝试过什么,我都会以同样的方式陷入困境。 Autocomplete表示将java脚本放在页面的头部,这位于我的site.master中,文本框显然位于页面的下方。我想如果json数据即将到来(即使控制器断点从未命中)并且格式错误,我应该在列表中找到垃圾列表,是吗?谢谢你的任何建议!!!!
编辑:找到this优秀页面,最后得到以下内容:
<script type="text/javascript">
$(document).ready(function () {
$("#tags").autocomplete({
source: function (request, response) {
$.ajax({
url: "/Wos/Filter", type: "POST", dataType: "json",
data: { searchText: request.term, maxResults: 10 },
success: function (data) {
response($.map(data, function (item) {
return { label: item.SiteName, value: item.SiteName, id: item.SiteId }
}))
}
})
},
minLength: 3
});
});
</script>
和
[HttpPost]
public JsonResult Filter(string searchText, int maxResults)
{
var siteList = _sitesRepository.GetSites(searchText);
return Json(siteList, JsonRequestBehavior.AllowGet);
}
现在工作正常。如果没有完全理解这一点(刚刚开始使用java,你能说不出来吗?)看来请求/响应是什么诀窍。这必须是由于页面上引用的mvc2更改,我假设,因为这里引用的许多工作示例对我来说都不起作用,即使是一个简单的列表,但这样做。
答案 0 :(得分:2)
尝试使用HttpPost属性修饰Filter函数,如下所示:
[HttpPost]
public ActionResult Filter(string q)
{
var siteList = _sitesRepository.GetSites(q);
return Json(siteList, JsonRequestBehavior.AllowGet);
//return siteList;
}
答案 1 :(得分:1)
修改强>
实际上,您似乎没有正确使用自动填充功能。请参阅此处的示例 http://jqueryui.com/demos/autocomplete/#remote-jsonp
尝试做(希望括号和括号是正确的)
$("input#sitesearchlist").autocomplete({source: function(request, response) {
$.getJSON('<%= Url.Action("Filter", "Wos") %>', {q: request.term}, function(data) {
response($.map(data, function(item) {
return {label: item.SiteName, value: item.SiteId};
}));
});
}});
答案 2 :(得分:0)
input#sitesearchlist
是一个有效的jQuery选择器吗?可以肯定的是,我会给文本框一个id并运行一个jQuery选择器。
HTH