代码之家  ›  专栏  ›  技术社区  ›  Ben

ASP.NetMVCjQueryUI自动完成-调试时不显示列表

  •  1
  • Ben  · 技术社区  · 14 年前

    我已经在我的应用程序中实现了邮政编码的自动完成功能。我正在Firebug中调试,我在控制台中看到操作正在执行,我在结果列表中得到了一个邮政编码列表,但实际列表在调试时没有显示。

    以下是我的客户控制器中的操作:

    //the autocomplete request sends a parameter 'term' that contains the filter
    public ActionResult FindZipCode(string term)
    {
        string[] zipCodes = customerRepository.FindFilteredZipCodes(term);
    
        //return raw text, one result on each line
        return Content(string.Join("\n", zipCodes));
    }
    

    这是标记(缩写)

    <% using (Html.BeginForm("Create", "Customers")) {%>
    <input type="text" value="" name="ZipCodeID" id="ZipCodeID" />
    <% } %>
    

    下面是我加载脚本的顺序:

    <script type="text/javascript" src="/Scripts/jquery-1.4.2.js"></script>
    <script type="text/javascript" src="/Scripts/jquery.ui.core.js"></script>
    <script type="text/javascript" src="/Scripts/jquery.ui.widget.js"></script>
    <script type="text/javascript" src="/Scripts/jquery.ui.position.js"></script>
    <script type="text/javascript" src="/Scripts/jquery.ui.autocomplete.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            $("#ZipCodeID").autocomplete({ source: '<%= Url.Action("FindZipCode", "Customers") %>'});
        });
    </script>
    

    编辑:我添加了一个图像,显示我在firebug中看到的内容-看起来我得到了我的邮政编码,但只是不显示下拉列表。

    我还更新了文本框,使其位于ui小部件div中,如下所示:

    <div class="ui-widget">
        <input type="text" name="ZipCodeID" id="ZipCodeID" />
    </div>
    

    这是我正在使用的脚本:

    <script type="text/javascript">
        $(document).ready(function() {
            $("#ZipCodeID").autocomplete('<%= Url.Action("FindZipCode", "Customers") %>');
        });
    </script>
    
    3 回复  |  直到 8 年前
        1
  •  6
  •   Ben    14 年前

    我能够使用以下代码获得自动完成建议:

    public JsonResult FindZipCode(string term)
        {
            VetClinicDataContext db = new VetClinicDataContext();
    
            var zipCodes = from c in db.ZipCodes
                           where c.ZipCodeNum.ToString().StartsWith(term)
                           select new { value = c.ZipCodeID, label = c.ZipCodeNum};
    
            return this.Json(zipCodes, JsonRequestBehavior.AllowGet);
        }
    

    标记:

    <script type="text/javascript">
        $(document).ready(function() {
            $("#ZipCodeID").autocomplete({
                      source: '<%= Url.Action("FindZipCode", "Customers") %>',
            });
        });
    </script>
    
    <div class="ui-widget"><input type="text" name="ZipCodeID" id="ZipCodeID" /></div>
    
        2
  •  2
  •   mare    14 年前

    这是100%的工作,但它可能不适合你。但我希望这有帮助。把两者都放进去文件准备就绪()功能。

    $("#products").autocomplete('<%:Url.Action("GetProducts", "Product") %>', {
        dataType: 'json',
        parse: function (data) {
            var rows = new Array(data.length), j;
            for (j = 0; j < data.length; j++) {
                rows[j] = { data: data[j], value: data[j].Title, result: data[j].Title };
    
            }
            return rows;
        },
        formatItem: function (row, y, n) {
            return row.PrettyId + ' - ' + row.Title + ' (' + row.Price + ' €)';
        },
        width: 820,
        minChars: 0,
        max: 0,
        delay: 50,
        cacheLength: 10,
        selectFirst: true,
        selectOnly: true,
        mustMatch: true,
        resultsClass: "autocompleteResults"
    });
    $("#products").result(function (event, data, formatted) {
        if (data) {
    
            var item = $("#item_" + data.PrettyId),
                        edititem = $("#edititem_" + data.PrettyId),
                        currentQuantity;
            // etc...
        }
    });
    
        3
  •  2
  •   Darin Dimitrov    14 年前

    尝试从控制器操作返回JSON:

    public ActionResult FindZipCode(string term)
    {
        string[] zipCodes = customerRepository.FindFilteredZipCodes(term);
        return Json(new { suggestions = zipCodes }, JsonRequestBehavior.AllowGet);
    }
    

    另外,不要忘记包含默认CSS,否则您可能看不到div的建议。