2012-02-13 9 views
1

jQuery UIオートコンプリートウィジェットhttp://jqueryui.com/demos/autocomplete/#remoteを使用してasp.netテキストボックスを実装しようとしています。jQueryオートコンプリートでリモートデータソースを照会

ウィジェットのsourceプロパティは、JSONデータを返すURLリソースを指す文字列を必要とします。後ろに

コード:

private void GetWidgets(string name) 
{ 
    var jscriptSerializer = new JavaScriptSerializer(); 
    var widgets = jscriptSerializer.Serialize(GetMatchingWidgets(name)); 
    var script = "Widgets = {\"Widget\": " + widgets + "};"; 

    Page.ClientScript.RegisterStartupScript(Page.GetType(), "JSON", script, true); 
} 

質問:私は、次のように返しますaspxページを持っている

  1. ドキュメントは言うThe request parameter "term" gets added to that URL. - 従って私は「得ることができる必要があります用語 "クエリ文字列パラメータとして正しい?
  2. JSONをクライアント上の変数に設定する必要がありますか、または何もせずにバインディングを処理しますか?

私には他に何かがありますか?

私はこれを試してみると、"数字を出してください"しかし、私はこの解決策に費やす時間が非常にありません。

ヘルプは常に高く評価されます。

答えて

1

はい、termは、QueryStringパラメータの名前です。あなたがする必要があるのは、予想される形式のjsonデータを返すことだけです。例えば、ここで私が使用するクラス...例えば

/// <summary> 
/// JQuery UI Autocomplete plugin expects an object with "value" and/or "label" property. 
/// </summary> 
public class AutoCompleteData 
{ 
    /// <summary> 
    /// custom property 
    /// </summary> 
    public string id { get; set; } 

    /// <summary> 
    /// value is shown in text box after selection 
    /// </summary> 
    public string value { get; set; } 

    /// <summary> 
    /// label is shown in drop down list 
    /// </summary> 
    public string label { get; set; } 
} 

...私の例ではそう

string term = Request.QueryString["term"]; 

AutoCompleteData[] d = GetMatchingWidgets(term) 
    .Select(x => new AutoCompleteData { 
     label = x.widgetLabel, 
     value = x.widgetValue 
    }).ToArray(); 

return jscriptSerializer.Serialize(d); 
+0

オブジェクト 'script'は' AutoCompleteData'の配列になりますか? – Rich

+0

はい、それはAutoCompleteDataのjsonでエンコードされた配列ですが、サンプルを見ると、すべてのデータでクライアントを初期化しようとしていて、クライアントで検索できるようにしていますか?私は常にタームパラメータに基づいて検索を動的に実行することでそれを行ってきました。 – dotjoe

+0

fyiの場合、クライアントで検索を実行すると、ソースオプションhttp://docs.jquery.com/UI/Autocomplete#option-soureでプラグインを初期化できます。ラベルと値が異なる場合は、一般的にそのクラスを使用しますが、同じであれば、文字列を渡すこともできると思います。 – dotjoe

関連する問題