我是从自动填充文本框示例中学习的新手。我不明白的是在我的控制器的“AutoCompleteHelper”函数中,输入必须命名为“term”。如果我将其命名为其他内容,例如“mystr”或“reqstr”,那么在调试期间,它总是会说输入为“null”。我没有在.js和.cshtml中的其他地方定义“术语”。我实际上在.cshtml文件中将其命名为name =“q”。是什么让我使用“term”这个名字?
控制器代码:
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”作为我的参数名称。
答案 0 :(得分:1)
自动完成功能进行AJAX调用以获取数据,并在查询字符串中使用名称term
,例如AutoCompleteHelper?term=Brainfuck
。
MVC框架会自动将查询字符串和表单内容与操作方法中的参数进行匹配,因此当方法为term
参数时,来自名称为term
的查询字符串的值将用于{{1}}参数调用。
答案 1 :(得分: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 });
});