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 インスタンス引数: 'string' から '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 演算子 '&&' は型 'bool' および 'string' のオペランドには適用できません

4

2 に答える 2

1

オートコンプリート javascript ツールでは、通常、ソースを関数として構成できます。これは、javascript 関数とローカル データ、または AJAX サーバー ソースへの関数のいずれかです。

ローカルの JavaScript 関数または remove 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) {
                ...

次の 2 行に注意してください。

  1. autocompleteContext 変数が設定されている場所、おそらくあなたが話しているドロップボックスから
  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 に答える