2011-08-16 107 views
0

我有這個代碼,自動完成,但顯然我做錯了,因爲它不工作。MVC與自動完成不工作

這是我的看法:

@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

您是否收到異常或錯誤?你在FireBug下檢查過它嗎? – mxmissile

+0

雖然從使用asp.net-mvc開始已經有一段時間了,但我認爲它實際上看起來不錯。用螢火蟲進行測試以縮小可能出錯的事情是最好的方法。檢查是否存在具有city-id的元素,UI是否正確加載,URL是否工作,這是自動填充的源代碼等。 – Johan

回答

0

的第一個問題是Url.Action是沒有得到的JavaScript和第二個問題裏面解決像雅各布說的是我不得不使用期限。

我剛剛使用下面的url而不是url動作。

$(「#city」)。autocomplete({Location location/CityList' });

+1

您正在使用'<%:'而不是Razor語法。你應該可以使用'Url.Action',就像這樣做:'@ Url.Action(「CityList」,「Location」)'。 – Jacob

5

我覺得你的問題是這樣的:

Url.Action("Location", "CityList") 

Url.Action採取行動的名頭,然後控制器「名稱」。我也發現這種反直覺。做到這一點,而不是:

Url.Action("CityList", "Location") 

更新:

我已經看過了documentation爲jQuery的自動完成插件,它看起來像你的控制器應接受一個名爲term,不city參數。也許這是你遇到的另一半問題。

public ActionResult CityList(string term) 
{ 
    // ... 
} 
+0

這沒有解決問題 –

+1

我認爲你有第二個問題。查看我的更新。 – Jacob