2009-05-14 8 views
2

MVCアプリケーションでは、いくつかのページでjQueryオートコンプリートコントロールを使用します。これはCreateで正常に動作しますが、Editで動作させることはできません。MVC:編集時にオートコンプリートの値を設定する

実際に、オートコンプリートコントロールをモデルからプリロードする方法はわかりませんが、ユーザーが値を変更したい場合はオートコンプリートとして動作します。

また、値がCreateで使用されているのと同じ形式で表示されるようにするにはどうすればよいですか?

すべてのオートコンプリートコントロールには対応するコントローラがあり、すべてのJson結果を解析します。

+1

プリロードとは何を意味し、それでもオートコンプリートとして動作しますか?テキストボックスに、コントローラがビューに送信する値を含めるようにしますか? –

答えて

0

これを試してみましょう! Alright Do do this: フィルタリングが必要な国のリストがあるとします。 オートコンプリートは、デフォルトでいくつかのデフォルトのものを知っていますが、CountryNameを本当に必要としていて、すべてのキー入力が指定したURLへのajaxコールを行っているとします。 そのようにアクションメソッドを作成します。ここでは

public ActionResult LookupCountry(string q, int limit) 
    { 
     var list = GetListOfCountries(q, 0, limit); 
     var data = from s in list select new {s.CountryName}; 
     return Json(data); 
    } 

はjqueryのである:ここでは

$(document).ready(function() { 
    $('#txtCountryName').autocomplete('<%=Url.Action("LookupCountry", "MyController") %>', { 
     dataType: 'json', 
     parse: function(data) { 
      var rows = new Array(); 
      for(var i=0; i<data.length; i++){ 
       rows[i] = { data:data[i], value:data[i].CountryName,   result:data[i].CountryName}; 
      } 
      return rows; 
     }, 
     formatItem: function(row, i, n) { 
      return row.CountryName; 
     }, 
     width: 300, 
     mustMatch: true, 
    }); 
}); 

Htmlの

<html><head></head><body>@Html.TextBox("txtCountryName",Model.CountryName)</body></html> 

は基本的には、魔法はLookUpCountry ザ・への呼び出しになっていますGetCountriesList(文字列クエリ、int startindex、int limit) 戻り値MyCountries.Where(c => c.CountryName.SubString(startindex, limit).Contains(query)).ToList();

JQueryはCountryNameが何であるか分からないので、独自のトリミング関数を作成しています。それはjavascriptオブジェクトだった場合どのようにこれまで私はかなりわかりませんが、Htmlのヘルパー拡張メソッドとして必要な国を返します

var jsonString = @Html.GetListOfCountries() //Or Model.Countries.ToJSONString() 
var json = JSON.stringify(jsonString); //also JSON.Parse(jsonString) if stringify won't work 

を行います。そしておそらく、javascriptオブジェクトのリストとして、それをそのような方法でそれをネイティブ言語で処理するのに十分なほどスマートになるでしょう。しかし、最初のアプローチは私のために働く。

関連する問題