0

私はオートコンプリートテキストボックスの例から学ぶ初心者です。私が理解していないのは、コントローラーの「AutoCompleteHelper」関数にあります。入力には「term」という名前を付ける必要があります。「mystr」や「reqstr」など、別の名前を付けると、デバッグ中、入力は常に「null」と表示されます。.jsと.cshtmlの他の場所で「用語」を定義しませんでした。実際、.cshtmlファイルではname="q"と呼んでいます。「用語」という名前を使わせているのはなぜですか?

コントローラーコード:

    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")" />

私は何かを見落としている/誤解していますか?パラメータ名として「term」を使用するように修正された理由がわかりません。

4

2 に答える 2

1

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

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

于 2012-04-23T12:20:30.140 に答える
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 });
});
于 2012-04-23T12:26:35.560 に答える