【问题标题】:ASP.Net MVC Jquery UI Autocomplete - list not showing up when I debugASP.Net MVC Jquery UI 自动完成 - 调试时列表未显示
【发布时间】:2010-09-22 08:57:25
【问题描述】:

我已经在我的应用中实现了邮政编码的自动填充功能。我正在 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-widget 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>

【问题讨论】:

    标签: c# asp.net-mvc jquery-autocomplete


    【解决方案1】:

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

    控制器:

    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】:

      几个月前我第一次设置自动完成时遇到了很大的问题。例如,像你这样简单的默认接线对我来说从来没有用过。我必须指定所有内容并将结果函数附加到它。

      这 100% 有效,但可能不适合您。但我希望它有所帮助。将两者都放入 document.ready() 函数中。

      $("#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】:

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

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

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

        【讨论】:

        • 谢谢!我正在使用与我正在使用的主题(peppergrinder)一起获得的 CSS,它适用于其他 Jquery ui 的东西——比如手风琴。默认的 CSS 是什么?我没有这些……
        • 是的,默认情况下,我指的是您使用该主题获得的那个。没错。
        • 我仔细检查了我的 CSS 并更改了我的操作以重新调整 JSON,它现在返回 JSON,但仍然不显示建议 div。事实上 - 我没有建议 div - 我只有 UI Widget div 和其中的文本输入。我应该有另一个 div 来显示建议还是自动完成功能可以处理?
        猜你喜欢
        • 1970-01-01
        • 2017-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多