2011-12-13 94 views
3

我有一個ASP.NET webforms應用程序,並試圖在文本框上實現jQuery autocomplate。服務器代碼正在調用,但沒有顯示任何內容。我已將調用替換爲Web服務,並添加了一些靜態文本,並顯示OK。任何人都可以看到問題是什麼?ASP.NET Jquery自動完成

服務器端代碼是在這裏:

[WebMethod] 
    public string[] ReturnPostcodes(string term) 
    { 
     PostcodeService postcodes = new PostcodeService(); 
     var results = postcodes.ReturnPostcodes().Where(p => p.Postcode.StartsWith(term.ToUpper())).Select(p => p.Postcode).Take(20).ToArray(); 
     return results; 

    } 

的HTML是在這裏:

<tr> 
     <td>Mobile Telephone:</td> 
     <td><asp:TextBox runat="server" ID="txtPostcode"></asp:TextBox></td> 
    </tr> 

jQuery的是在這裏:

$(document).ready(function() { 
     $('#ctl00_ctl00_mainContent_mainContent_txtPostcode').each(function() { 

      $(this).autocomplete({ 
       source: '/Postcodes.asmx/ReturnPostcodes' 
      }); 
     }); 
    }); 
+0

此鏈接應幫你。 http://www.dotnetcurry.com/ShowArticle.aspx?ID=515 – PraveenLearnsEveryday

回答

3

原因是沒有顯示出來是因爲你沒有給自動完成正確的數據格式,你也沒有指定如何加載數據。 您可以從webservice返回JSON或XML格式,或者使用jquery自行解析響應。結帳jquery ui autocomplete site for 遠程JSONP解析XML數據一次示例。

0

確保Result不爲空

嘗試使用StartsWith和傳遞一個StringComparison

var results = postcodes.ReturnPostcodes().Where(p => p.Postcode.StartsWith(term,StringComparison.InvariantCultureIgnoreCase)).Select(p => p.Postcode).Take(20).ToArray(); 
0

asp.net的WebMethods返回一個包含在「D」變量的響應JSON對象(而且有一些選項來設置,當你用jQuery XHR稱呼它), 腳本片段:

<script type="text/javascript"> 
     $(function() { 
      var lastXhr, cache = {}; 

      $('#<%= Search.ClientID %>').autocomplete({ 
       source: function (request, response) { 
        var term = request.term; 
        if (term in cache) { 
         response(cache[term]); 
         return; 
        } 

        lastXhr = $.ajax({ 
         type: "POST", 
         url: "Default.aspx/GetBooks", 
         data: "{ \"term\": \"" + request.term + "\" }", 
         contentType: "application/json; charset=utf-8", 
         dataType: "json", 
         success: function (data, status, xhr) { 
          cache[term] = data.d; 
          if (xhr === lastXhr) { 
           response(data.d); 
          } 
         } 
        }); 
       } 
      }); 
     }); 
    </script>