web-dev-qa-db-ja.com

MVC5のオートコンプリートドロップダウン?

こんにちは私は私のビューに1つのフィールドがあります。そのフィールドはCustomerであり、ドロップダウンフィールドです。その中で、値を選択するための選択オプションとしてドロップダウンを保持します。しかし、私はそのフィールドをオートコンプリートドロップダウンとして変更するのが好きです。

enter image description here

上の画像では、ドロップダウンフィールドとしてcustomerNameフィールドがありますが、検索して選択し、オプションを選択します。しかし今、私はこれを下の画像で言及されているようなオートコンプリートドロップダウンに変更したいです。

enter image description here

マイビューコード

 @Html.Label("Customer Name", new { @class = "control-label" })
 @Html.DropDownListFor(model => model.CustomerID, new SelectList(string.Empty, "Value", "Text"), "Please select a Customer", new { @class = "form-control required", type = "text" })

私のjqueryコード

  $(function () {
     debugger;
    $.ajax(

   '@Url.Action("GetVisitCustomer", "VisitorsForm", new { Area = "Sales" })',{
       type: "GET",
       datatype: "Json",
       success: function (data) {
       $.each(data, function (index, value) {
       $('#CustomerID').append('<option value="' + value.CustomerID + '">' + value.DisplayName + '</option>');

                });
               }
             });            
           });

顧客を取得してフィールドにロードするための私のコントローラーコード

  public JsonResult GetVisitCustomer()
    {
        var objCustomerlist = (from c in db.Customers where c.IsDeleted== false select c).ToList();
        return Json( objCustomerlist,JsonRequestBehavior.AllowGet);
    }

私は私の問題を説明しようとしました。誰でもこの問題を解決するのに役立ちます。私は多くの方法を試しましたが、うまくいきませんでした。だから誰でも私の問題を理解し、いくつかの解決策や提案を与えます。

私が試したコード

私のビューコード

 @Html.Label("Customer Name", new { @class = "control-label" })
 @Html.TextBoxFor(Model=>Model.CustomerID)

私のjqueryコード

  <script type="text/javascript">
    $(document).ready(function () {
        debugger;
        $("#CustomerID").autocomplete({
            source: function (request, response) {
                $.ajax(
                     '@Url.Action("GetVisitCustomer", "VisitorsForm", new { Area = "Sales" })', {
                    type: "POST",
                    dataType: "json",
                    data: { term: request.term },
                    success: function (data) {
                        response($.map(data, function (item) {
                            return
                            { label=item.CustomerID, value= item.DisplayName
                            };
                        }))

                    }
                })
            },
            messages: {
                noResults: "", results: ""
            }
        });
    })
</script>

しかし、このコードは機能していません

よろしくお願いします。

7
Susan

以下のコードをご覧ください。

[〜#〜] html [〜#〜]

            @Html.LabelFor(model => Model.CustomerName, new { @class = "control-label" })
            @Html.TextBoxFor(model => Model.CustomerName, new { @class = "form-control"})
            @Html.HiddenFor(model => Model.CustomerID)

[〜#〜] js [〜#〜]

$(document).ready(function () {
    $("#CustomerName").autocomplete({
        source: function (request, response) {
            $.ajax({
                url: '@Url.Action("GetVisitCustomer", "Home")',
                datatype: "json",
                data: {
                    Areas: 'Sales',
                    term: request.term
                },
                success: function (data) {
                    response($.map(data, function (val, item) {
                        return {
                            label: val.Name,
                            value: val.Name,
                            customerId: val.ID
                        }
                    }))
                }
            })
        },
        select: function (event, ui) {
            $("#CustomerID").val(ui.item.customerId);
        }
    });
});

[〜#〜]コード[〜#〜]

    public JsonResult GetVisitCustomer(string Areas, string term = "")
    {
        var objCustomerlist = db.Customers.Where(c => c.IsDeleted == false)
                        .Where(c => c.CustomerName.ToUpper()
                        .Contains(term.ToUpper()))
                        .Select(c => new { Name = c.CustomerName, ID = c.CustomerID })
                        .Distinct().ToList();
        return Json(objCustomerlist, JsonRequestBehavior.AllowGet);
    }

スクリーンショットの例

Img 1. Shows the autocomplete dropdownImg 2. Shows the selected Customer Name and the corresponding Id added to the CustomerID hidden field.

18
denchu