0

有谁知道如何根据下拉列表中所选项目的值过滤文本框中返回的数据,或者有任何链接。

即,如果用户从列表中选择酒店,那么当他们开始在文本框中输入时,只有与酒店类别匹配的公司的地址才会使用自动完成功能出现。


我在下面添加了服务器端代码,但出现以下错误。

public JsonResult FilterDirectorySearch(string searchText, string context)
        {
        var wq = DirectoryList(searchText,context).Select(a =>
           new { Location = a.strLocationSearch });
        return Json(wq.Distinct(), JsonRequestBehavior.AllowGet);
        }

    private List<DisplayDirectoryDataForSearchBox> DirectoryList(string searchString, string context)
        {
        var wq = _IGTDD.DisplayDirectoryData()
                  .Where(a => a.strLocationSearch.Contains(searchString, StringComparison.OrdinalIgnoreCase) && a.strCategory = context).ToList();
        return wq.ToList();
        }

错误 错误 1 ​​实例参数:无法从“字符串”转换为“System.Linq.IQueryable”

错误 2 'string' 不包含 'Contains' 的定义,并且最佳扩展方法重载 'System.Linq.Queryable.Contains(System.Linq.IQueryable, TSource, System.Collections.Generic.IEqualityComparer)' 有一些无效参数

错误 3 参数 3:无法从 'System.StringComparison' 转换为 'System.Collections.Generic.IEqualityComparer'

忘记为下面的代码添加此错误

return (from x in wq where x.strLocationSearch.StartsWith(searchString, StringComparison.OrdinalIgnoreCase) && x.strCategory = context select x.strLocationSearch).AsEnumerable();

错误消息:错误 1 ​​运算符“&&”不能应用于“布尔”和“字符串”类型的操作数

4

2 回答 2

1

任何自动完成 javascript 工具通常都允许您将源配置为函数,可以是 javascript 函数和本地数据,也可以是 AJAX 服务器源的函数。

在本地 javascript 函数或删除 AJAX 响应程序中,您可以通过从所需的下拉框中拉取值来简单地添加额外的上下文数据。

然后处理将在本地 javascript 代码中或在远程 AJAX 响应程序中处理额外信息。

如果没有您使用的自动完成编码的任何上下文,很难用代码说明我的答案。

但是,如果您使用 jQuery、自动完成 UI 和 AJAX 函数作为源代码:

$("#autocompleteTextBox").autocomplete({
    source: function(request, response) {
        var autocompleteContext = $("#dropdownBox").val();
        $.ajax({
            url: "http://source.com/searchJSON",
            dataType: "jsonp",
            data: {
                query: request.term,
                context: autocompleteContext
            },
            success: function(data) {
                ...

注意这两行:

  1. 设置 autocompleteContext 变量的位置,大概来自您所说的 Dropbox
  2. 其中 autocompleteContext 被馈送到 data 参数中的 searchJSON 操作

在服务器端(searcjJSON 的处理程序)[C#/MVC 伪代码]:

public List<string> searchJSON(string query, string context)
{
   return (from x in db.SearchTable where x.Name.Contains(query) && x.context == context select x.Name).ToList()
}

如果您只是在 javascript 中使用本地数组源,请更改为函数源,类似于 AJAX 源...

var fullArray = ["Apple", "Bat", "Cat", "Dog"];
$("#autocompleteTextBox").autocomplete({
    source: function(request, response) {
        var autocompleteContext = $("#dropdownBox").val();
        response = //Code to filter fullArray with request.term and autocompleteContext here
    }
于 2013-01-17T12:58:38.380 回答
0

这是功能齐全的仅客户端示例:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="http://code.jquery.com/jquery-1.8.3.js" type="text/javascript"></script>
    <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js" type="text/javascript"></script>
    <link rel="stylesheet" href="http://jqueryui.com/resources/demos/style.css" />
    <script type="text/javascript">
        if (!Array.prototype.filter) {
            Array.prototype.filter = function (fun /*, thisp */) {
                "use strict";

                if (this == null)
                    throw new TypeError();

                var t = Object(this);
                var len = t.length >>> 0;
                if (typeof fun != "function")
                    throw new TypeError();

                var res = [];
                var thisp = arguments[1];
                for (var i = 0; i < len; i++) {
                    if (i in t) {
                        var val = t[i]; // in case fun mutates this
                        if (fun.call(thisp, val, i, t))
                            res.push(val);
                    }
                }

                return res;
            };
        }

        $(function () {
            var availableAddresses = [
                "New York Hotel",
                "London Restaurant",
                "London Hotel",
                "Paris Restaurant",
                "Berlin Restaurant",
                "Moscow Restaurant"
            ];
            $("#businesses").keyup(function () {
                $("#businesses").autocomplete({
                    source: availableAddresses.filter(function (element, index, array) {
                        return (element.toLowerCase()
                            .indexOf($("#filter").val().toLowerCase()) !== -1);
                    })
                });

            });
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <select id="filter">
                <option>hotel</option>
                <option>restaurant</option>
            </select>
            <input type="text" id="businesses"/>
        </div>
    </form>
</body>
</html>
于 2013-01-17T13:45:16.443 回答