通过ajax在自动完成查询中发送其他参数

时间:2015-10-21 07:31:43

标签: jquery asp.net-mvc jquery-ui jquery-ui-autocomplete

自动填充代码有效,但我无法使用实际搜索值过滤输出(低声说唱片记录),因为该参数(d.queryString)不在ajax请求中。

我有这个代码, 的文本框

<input type="text" name="CustomerNumber" value="@if (@ViewBag.CustomerNumber != null){@ViewBag.CustomerNumber}" />

Jquery脚本

<script type="text/javascript">

    $(document).ready(function () {

        $("input[name='CustomerNumber']").autocomplete({
            source: function (request, response) {
                $.ajax({
                    dataType: "json",
                    type: 'GET',
                    url: '@Url.Action("GetCustomerNames")',
                    data: function (d) {
                        d.queryString = $("input[name='CustomerNumber']").val()
                    },
                    success: function (data) {
                        // assuming data is a JavaScript array such as
                        // ["one@abc.de", "onf@abc.de","ong@abc.de"]
                        // and not a string
                        response(data);
                    }
                });
            },
            minLength: 3
        });

    });

</script>

.NET控制器

   public JsonResult GetCustomerNames(string searchQuery)
            {
                var autocompleteList = new List<string>();
                using (var db = new DB.APPDBContext())
                {
                    autocompleteList = db.GetAutocompleteList(1, searchQuery).ToList();
                }

                return Json(autocompleteList, JsonRequestBehavior.AllowGet);
            }

如果我输入3个字母,我会将所有(未过滤的)记录输入到低语,因为参数queryString(实际文本框值)不会发送到控制器。为什么ajax请求中缺少queryString参数?

感谢你的想法

1 个答案:

答案 0 :(得分:0)

1)创建一个包含文本框内容的对象:

 var queryString = {        
    searchQuery: $("input[name='CustomerNumber']").val()
 }

2)然后使用$.param创建一个URL以生成查询字符串:

var url = "@Url.Action("GetCustomerNames")?" + $.param(queryString);

3)使用Ajax方法中生成的URL:

$("input[name='CustomerNumber']").autocomplete({
        source: function (request, response) {
            $.ajax({
                dataType: "json",
                type: 'GET',
                url: url,
                success: function (data) {
                    // assuming data is a JavaScript array such as
                    // ["one@abc.de", "onf@abc.de","ong@abc.de"]
                    // and not a string
                    response(data);
                }
            });
        },
        minLength: 3
    });