我有这个代码可以自动完成,但显然我做错了,因为它不起作用。
这是我的观点:
@Html.EditorFor(model => model.city)<br />
@Html.ValidationMessageFor(model => model.city)
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js' type="text/javascript"></script>
<script src='<%: Url.Content("~/Scripts/jQueryUI/jquery-ui-1.8.2.custom.min.js") %>'
type="text/javascript"></script>
<script type="text/javascript">
$("#city").autocomplete({
source: '<%: Url.Action("Location", "CityList") %>'
});
</script>
这是我的控制者:
public class LocationController : Controller
{
private pEntities db = new pEntities();
public ActionResult CityList(string city)
{
var results = from c in db.CityCodes
where c.city.StartsWith(city)
select new { label = c.city, id = c.city_id };
return Json(results.ToArray(), JsonRequestBehavior.AllowGet);
}
答案 0 :(得分:5)
我认为你的问题是:
Url.Action("Location", "CityList")
Url.Action首先获取操作名称,然后获取控制器“name”。我发现反直觉也是如此。这样做:
Url.Action("CityList", "Location")
<强>更新强>
我查看了jQuery自动完成插件的documentation,看起来您的控制器应该接受名为term
的参数,而不是city
。也许这就是你遇到的另一半问题。
public ActionResult CityList(string term)
{
// ...
}
答案 1 :(得分:0)
第一个问题是Url.Action没有在javascript中得到解决,而像Jacob说的第二个问题是我必须使用term。
我刚用url而不是url action。
$( “#城市”)。自动完成({ 来源:'位置/城市列表' });