【问题标题】:jQuery AutoComplete not populating ASPjQuery AutoComplete 不填充 ASP
【发布时间】:2013-04-23 08:28:54
【问题描述】:

我正在尝试在我的 Web 应用程序中填充自动完成功能。该列表是从数据表中填充的。出于某种原因,我无法让它显示在自动完成中。我知道我正在从查询中获得结果,因为我可以使用消息框来查看它们。在此示例中,我将结果限制为 5。

客户端代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="AddToMonitoring.Default" %>

<head runat="server">
    <script type="text/javascript">
    $(document).ready(function () {
        $("#<%=txtAutoComplete.ClientID%>").autocomplete('AutoCompleteHandler.ashx');
    });
</head>
<body>
    <div id="inputDIV" style="font-size: x-large; font-family: Calibri; 
        position: relative; top: 25px; left: 25px; height: 638px; width: 1239px;">                
        Asset Name: <asp:TextBox id="txtAutoComplete" runat="server" />
    </div> 
</body>

这是处理程序页面:

public class AutoCompleteHandler : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        dsCIInfoTableAdapters.BMC_CORE_BMC_ComputerSystemTableAdapter serverTableAdapter1;
        serverTableAdapter1 = new dsCIInfoTableAdapters.BMC_CORE_BMC_ComputerSystemTableAdapter();

        dsCIInfo.BMC_CORE_BMC_ComputerSystemDataTable newServerTable;
        newServerTable = serverTableAdapter1.GetData();


        var query = (from row in newServerTable.AsEnumerable()
                     where row.Field<string>("Item") == "Server"
                     select row.Field<string>("Name")).Distinct().Take(5);

        var queryArray = query.ToArray();

        StringBuilder sb = new StringBuilder();
        foreach (string row in queryArray)
        {
            context.Response.Write(sb.Append(row).Append(Environment.NewLine));
        }

    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

【问题讨论】:

  • 您是否在您选择的浏览器开发工具中看到任何脚本错误(大多数为 F12)
  • 您确定需要使用StringBuilder吗?似乎很奇怪。你会尝试context.Response.Write(row + Environment.NewLine); 而不是context.Response.Write(sb.Append(row).Append(Environment.NewLine)); 希望有帮助。

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


【解决方案1】:

jQUery 自动完成需要一个 javascript 参数定义。

您正在向它传递一个服务器处理程序。

我猜你一定收到了一个 javascript 错误。检查控制台。

我通常使用对服务器方法的 AJAX 调用来定义自动完成功能,在该方法中我从数据库加载数据并将其返回给自动完成插件。

我不习惯使用 aspforms,但我很确定你的方向不正确。

查看文档以获取更多信息: http://jqueryui.com/autocomplete/

【讨论】:

    【解决方案2】:

    我决定取消处理程序页面,而是使用 hiddenElement

    客户端

    $(document).ready(function () {
        var tags = eval($("#<%=txtHiddenAutoComplete.ClientID%>").val());
        $("#<%=txtAutoComplete.ClientID%>").autocomplete({ source: tags });
    })
    

    将查询移至 Page_Load 函数

    protected void Page_Load(object sender, EventArgs e)
        {
            dsCIInfoTableAdapters.BMC_CORE_BMC_ComputerSystemTableAdapter serverTableAdapter1;
            serverTableAdapter1 = new dsCIInfoTableAdapters.BMC_CORE_BMC_ComputerSystemTableAdapter();
    
            dsCIInfo.BMC_CORE_BMC_ComputerSystemDataTable newServerTable;
            newServerTable = serverTableAdapter1.GetData();
    
    
            var query = (from row in newServerTable.AsEnumerable()
                         where row.Field<string>("Item") == "Server"
                         select row.Field<string>("Name")).Distinct();
    
            var queryArray = query.ToArray();
    
            StringBuilder sb = new StringBuilder();
            sb.Append("[");
            foreach (string row in queryArray)
            {
                sb.Append("\"").Append(row).Append("\",");
            }
    
            sb.Append("]");
            sb.Replace(",]", "]");
            txtHiddenAutoComplete.Value = sb.ToString();
    
        }
    

    【讨论】:

      【解决方案3】:

      将您的 asp.net 处理程序中的最后四行更改为

          StringBuilder sb = new StringBuilder();
          foreach (string row in queryArray)
          {
              sb.Append(row).Append(Environment.NewLine);
          }
      
          context.Response.Write(sb.ToString()); 
      

      并添加缺少的结束脚本块。

      并添加这个

        <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.10/jquery-ui.min.js"></script>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-29
        • 2012-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-16
        • 2015-04-09
        • 2016-11-07
        相关资源
        最近更新 更多