2012-04-23 7 views
0

私は、オートコンプリートのテキストボックスの例から学ぶ初心者です。私が理解していないのは、私のコントローラの "AutoCompleteHelper"機能です。入力は "term"と命名されなければなりません。私が "mystr"や "reqstr"のような名前を付けた場合、デバッグ時には常に入力が "null"と言われます。私は自分の.jsと.cshtmlのどこにでも "用語"を定義しませんでした。私は実際に.cshtmlファイル内でそれをname = "q"と呼んでいました。私は「ターム」という名前を何に使用していますか?MVCの基礎 - コントローラの入力パラメータ

コントローラーコード:

string[] txtlst = {"ActionScript", "AppleScript", 
     "Asp", "BASIC", "C", "C++", "Clojure", 
     "COBOL", "ColdFusion", "Erlang", "Fortran", 
     "Groovy", "Haskell", "Java", "JavaScript", 
     "Lisp", "Perl", "PHP", "Python", "Ruby", "Scala", "Scheme"}; 

public JsonResult AutoCompleteHelper(string term) { 
      if (!Request.IsAjaxRequest()) return null; 
      var lst = txtlst.Where(s => s.StartsWith(term)).ToList(); 
      var res = lst.Select(x => new { value = x, label = x }); 
      return Json(res, JsonRequestBehavior.AllowGet); 
     } 

の.jsコード:

$("input[data-autocomplete-source]").each(function() { 
     $(this).autocomplete({ source: $(this).attr("data-autocomplete-source") }); 
    }); 
}); 

.cshtmlコード:

<p>Auto Complete Example</p> 
<input type="text" name="q" data-autocomplete-source="@Url.Action("AutoCompleteHelper", "Home")" /> 

私は何かを誤解/見渡せるだろうか?私はなぜ私のparam名として "用語"を使用するように修正されているのかわかりません。

答えて

1

オートコンプリートは、データを取得するためのAJAX呼び出しを行い、クエリ文字列にはtermという名前を使用します。 AutoCompleteHelper?term=Brainfuck

MVCフレームワークは、クエリー文字列とフォームコンテンツをアクションメソッドのパラメータと自動的に照合するため、termという名前のクエリ文字列の値が、メソッドの呼び出し時にtermパラメータに使用されます。

+0

ohh大丈夫です!だから、どこにでも自分の固有のparam名を定義できますか?私は私の名前= "q"がそれをしていると思った、そうでなければ、それは何ですか?一般に、どのヘルパーがどのクエリ文字列にどのパラメータと名前を渡しているのかを確認するにはどうすればよいですか?私の初心者のスパムの質問には申し訳ありません。 – Tom

+0

@Tomあなたが 'AutoCompleteHelper(文字列q)'に変更した場合、コントローラで 'AutoCompleteHelper(文字列)'を設定すると思います。@ – Manatherin

+0

に変更されると思います。私がそれを実行すると、qはnullです。それは言葉に過ぎない。 – Tom

0

なぜ純粋なJSでこれをやりなさい、もっと道を与えてください流暢?とにかくほとんど静的です:

var txtlst = [ "ActionScript", "AppleScript", 
       "Asp", "BASIC", "C", "C++", "Clojure", 
       "COBOL", "ColdFusion", "Erlang", "Fortran", 
       "Groovy", "Haskell", "Java", "JavaScript", 
       "Lisp", "Perl", "PHP", "Python", "Ruby", 
       "Scala", "Scheme"]; 

$("input[data-autocomplete-source]").each(function() { 
    $(this).autocomplete({ source: txtlst }); 
}); 
+0

フィルタリングされたリストはサーバーから動的に生成されるため、実際の状況で何千ものアイテムをクライアントスクリプトに渡す必要はありません。 – Tom

+0

@トム:ああ、わかった、それは悪い例だった。 :D –