我很抱歉这是一种重复,但是,即使在查看关于该主题的其他几个问题之后,我仍然无法获得我的工作。使用JQuery和数据库自动完成 - APS.NET MVC
我想在我的表单中使用JQuery自动完成小部件从数据库中的30K +记录中进行选择。我相信我的问题出现在.autocomplete
函数的source
左右。
HTML + JS
@using (Html.BeginForm())
{
@Html.LabelFor(model => model.Name)
@Html.TextBoxFor(model =>model.Name, new { id="Search"})
}
<script type="text/javascript">
$('#Search').autocomplete({
source: '@Url.Action("GetVendors", "TestAutoComplete")',
minLength: 3
});
</script>
控制器动作
[HttpGet]
public JsonResult GetVendors(string Search)
{
return Json(DB.VendorLookUp(Search), JsonRequestBehavior.AllowGet);
}
我知道我的DB.VendorLookUp方法的工作(我单独测试它),我有没有按该GetVendors方法中的断点不会受到打击。
在控制台中我得到这个错误:
GET http://localhost:50848/TestAutoComplete/GetVendors?term=mic 500 (Internal Server Error)
(其中 '麦克风' 是我试图搜索)。 我假设问题的至少一部分是我的控制器方法是除了字符串“搜索”,当JS正在尝试获取“术语”。
在此先感谢您的帮助。
编辑: 事情我已经尝试:
- 改变参数在我的控制器行动“搜索”到“术语”
- 由于没有在我的控制器行动
- 更新任何参数@ Url.Action()沿值传递给:
source: '@Url.Action("GetVendors", "TestAutoComplete", new {Search= $('#VendorSearch').val() })'
- ,但得到的错误
Invalid anonymous type member declarator. Anonymous type members must be declared with a member assignment, simple name or member access.
UPDATE:
多亏了评论意见,望着通过网络错误 - >检查响应了我一个有意义的错误。我试图赶上js调用,我可以有2个控制器动作 - 一个带有参数,另一个带无参数。这使代码混淆。我删除了没有参数的动作,现在控制器动作正常运行,DB.VendorLookUp返回Vendor_VM列表(控制器正确地转换为JSON对象)。
但是,结果没有正确返回 - 请参阅下面的图3。选项不在下拉列表中,并且不显示任何值。
- 如何更新cshtml/js以将名称传递给输入表单?
- 如何让这些值以适当的下拉方式显示?
更改方法'公共JsonResult GetVendors(字符串项)' –
我已经试过了。仍然得到错误:'GET HTTP://本地主机:50848/TestAutoComplete/GetVendors项=麦克风500(内部服务器错误)'当我控制器操作如下:?'[HTTPGET] 公共JsonResult GetVendors(字符串项) { 返回Json(DB.VendorLookUp(term),JsonRequestBehavior.AllowGet); }' – swallis1
然后你的'VendorLookUp()'方法抛出一个异常。使用您的浏览器工具(网络选项卡检查结果,其中将包括错误的详细信息) –