jQuery AutoComplete没有填充ASP

时间:2013-04-29 15:34:16

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

我正在尝试在我的网络应用中填充自动完成功能。该列表由数据表填充。出于某种原因,我无法在自动完成中显示它。我知道我从查询中获得结果,因为我可以使用消息框来查看它们。在这个例子中,我将结果限制为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;
        }
    }
}

3 个答案:

答案 0 :(得分:0)

jQUery autocomplete需要javascript定义参数。

您正在传递服务器处理程序。

我猜您必须收到javascript错误。检查控制台。

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

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

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

答案 1 :(得分: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>

答案 2 :(得分: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();

    }