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

我是否忽略/误解了什么?我不明白为什么我固定使用“术语”作为我的参数名称。

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 回答