0

我正在尝试在我的 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;
        }
    }
}
4

3 回答 3

0

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

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

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

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

我不习惯使用 aspforms,但我很确定你没有朝着正确的方向前进。

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

于 2013-04-29T15:45:48.903 回答
0

将您的 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>
于 2013-04-29T16:05:23.347 回答
0

我决定取消处理程序页面,而是使用 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();

    }
于 2013-04-29T16:06:05.900 回答