具有自动完成功能的MVC不起作用

时间:2011-08-16 21:05:31

标签: c# jquery asp.net-mvc asp.net-mvc-3 jquery-autocomplete

我有这个代码可以自动完成,但显然我做错了,因为它不起作用。

这是我的观点:

@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);
    }

2 个答案:

答案 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。

$( “#城市”)。自动完成({         来源:'位置/城市列表'     });