2013-04-29 97 views
0

我想在我的Web应用程序中填充自动完成。该列表是从数据表填充的。出于某种原因,我无法将其显示在自动填充中。我知道我从查询中获得结果,因为我可以使用消息框来查看它们。在这个例子中,我将结果限制为5jQuery自动完成不填充ASP

客户端代码:

<%@ 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; 
     } 
    } 
} 
+0

你是否在你选择的浏览器开发工具中看到任何脚本错误(大部分是F12) – KingCronus 2013-04-29 15:44:00

+0

你确定需要使用StringBuilder吗?似乎很奇怪。而不是'context.Response.Write(sb.Append(row).Append(Environment.NewLine));'你会尝试'context.Response.Write(row + Environment.NewLine);'希望有所帮助。 – 2013-04-29 15:47:36

回答

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(); 

    } 
0

jQuery的自动完成预期的参数一个javascript定义。

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

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

我通常用一个AJAX调用来定义autocomplete到一个服务器方法,在这里我从数据库加载数据并将其返回到自动完成插件。

我不习惯使用aspforms,但我敢肯定你不会朝正确的方向发展。

进一步信息检查文档: http://jqueryui.com/autocomplete/

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>