2011-08-16 15 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を使ってからしばらくしていますが、実際にはかなり良いと思います。間違っている可能性のあるものを絞り込むために火か虫獣でテストするのが最善の方法です。 UIが正しくロードされているかどうか、URLがオートコンプリートのソースであるかどうかなど、city-idの要素が存在するかどうかを確認します。 – Johan

答えて

0

最初の問題Url.Actionはjavascriptの内部で解決取得されていないとジェイコブのような第二の問題は、私は用語を使用しなければならなかったと述べました。

私はちょうどurlアクションの代わりにurlを使用しました。

$( "#city")。オートコンプリート({ ソース: 'Location/CityList' });

+1

あなたはRazorの構文の代わりに '<%:'を使用していました。 'Url.Action'を使うことができるでしょう。' @ Url.Action( "CityList"、 "Location") 'のようにしてください。 – Jacob

5

私はあなたの問題は、このだと思う:

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

Url.Actionは、最初のアクション名を取り、コントローラ "名前"。私はそれも反直感的であることがわかります。代わりに、次の操作を行います。

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

更新:

私はjQueryのオートコンプリートプラグインのdocumentation見てきました、そして、あなたのコントローラがterm、ないcityという名前のパラメータを受け入れるべきであるように見えます。おそらくそれはあなたが遭遇している問題の残りの半分です。

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

これで問題は修正されませんでした –

+1

2番目の問題があったと思います。私の更新を参照してください。 – Jacob

関連する問題