Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery MVC基础-控制器输入参数_Jquery_Asp.net Mvc_Asp.net Mvc 3_Razor - Fatal编程技术网

Jquery MVC基础-控制器输入参数

Jquery MVC基础-控制器输入参数,jquery,asp.net-mvc,asp.net-mvc-3,razor,Jquery,Asp.net Mvc,Asp.net Mvc 3,Razor,我是一个从自动完成文本框示例学习的新手。我不明白的是,在控制器中的“AutoCompleteHelper”函数中,输入必须命名为“term”。如果我将它命名为其他名称,比如“mystr”或“reqstr”,那么在调试期间,它总是会说输入为“null”。我没有在我的.js和.cshtml中定义“术语”。实际上,我在.cshtml文件中将其命名为name=“q”。是什么让我用“术语”这个名字 控制器代码: string[] txtlst = {"ActionScript", "AppleSc

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

自动完成调用AJAX获取数据,并在查询字符串中使用名称
term
,例如
自动完成助手?term=Brainfuck


MVC框架会自动将查询字符串和表单内容与action方法中的参数进行匹配,因此在调用方法时,使用名为
term
的querystring中的值作为
term
参数。

为什么不在纯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 });
});

哦,好的!那么,是否有任何地方可以定义我自己的特定参数名?我以为我的name=“q”在做那件事,如果不是,那是在做什么?通常,如何检查每个不同的帮助器传递给查询字符串的参数及其名称?很抱歉我的新手垃圾邮件问题。@Tom我想你在控制器中用
AutoCompleteHelper(字符串术语)
设置它,如果你把它改成
AutoCompleteHelper(字符串q)
我想它会改成q@Manatherin不,你试过了吗?当我运行它时,q是空的。只能是term。@Tom:自动完成调用中可能有一个定义查询字符串名称的设置。它不使用字段的名称,因为这样您就不能对不同的输入字段使用相同的服务器方法。@Manatherin:客户端代码在操作方法中看不到参数的名称,因此更改该名称不会更改用于发送请求的内容。因为筛选列表是从服务器动态生成的,我们不想在真实情况下将数千项传递给客户端脚本。@Tom:哦,我明白了,这是个糟糕的例子:D