MVC基础知识 - 控制器输入参数

时间:2012-04-23 12:08:26

标签: jquery asp.net-mvc asp.net-mvc-3 razor

我是从自动填充文本框示例中学习的新手。我不明白的是在我的控制器的“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”作为我的参数名称。

2 个答案:

答案 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 });
});