2012-03-07 34 views
7

tôi có tên hộp văn bản txtEmailList, tôi cung cấp danh sách autocomplete cho nó,jquery autocomplete với Danh sách <string> như Nguồn

<asp:TextBox runat="server" ID="txtEmailList" CssClass="txtAutoComplete"> 

kịch bản cho autocomplete

$('#txtEmailList').autocomplete({ 
       source: function(request, response) { 
// this is the ajax call, which is running successfully 
        var msg = 
Assessments_JqueryAutoComplete.AutoComplete(request.term).value; //(ajaxpro functions) 
        response(msg.d); 
       } 

      }); 

đầu ra sẽ đến như là như thế này (trong firebug nó hiển thị dạng plain/text), làm thế nào tôi có thể đính kèm mảng này vào thuộc tính nguồn. (Tôi không thể sử dụng phương thức $ .ajax, vì tôi cần sử dụng ajaxpro làm quy tắc văn phòng), vì vậy tôi lấy danh sách mảng từ cuộc gọi ajax, làm cách nào để tôi liên kết tự động hoàn thành.

[ "Danh sách 1", "Danh sách 2", "Danh sách 3", "Danh sách 4"];/* // đây là phản ứng đầu ra từ jquery (từ firebug)

[AjaxPro.AjaxMethod(HttpSessionStateRequirement.ReadWrite)] 
public List<string> AutoComplete(string query) 
{ 
List<string> objLisItmes = new List<string>(); 
objLisItmes.Add("List 1"); 
objLisItmes.Add("List 2"); 
objLisItmes.Add("List 3"); 
objLisItmes.Add("List 4"); 
return objLisItmes; 
} 

đây là đầu ra firebug cho tiêu đề Phản hồi

Cache-Controlno-cache Nội dung-Length40 Nội dung-Typetext/plain; charset = utf-8 DateWed, ngày 07 tháng 3 năm 2012 10:45:37 GMT Expires-1Pragmano-cache

+0

Tôi đoán bạn cần phải trả lại những gì bạn nhận được từ máy chủ ... – gdoron

+0

như thế nào? tôi đã thử phản hồi (msg.d) nhưng nó không hiển thị trong tự động hoàn thành –

+0

no ...Viết này: 'trở lại msg;' – gdoron

Trả lời

5

Thay vì trả lại một danh sách. Tôi sẽ trả về một chuỗi mảng như:

[AjaxPro.AjaxMethod(HttpSessionStateRequirement.ReadWrite)] 
public string[] AutoComplete(string query) 
{ 
    List<string> objLisItmes = new List<string>(); 
    objLisItmes.Add("List 1"); 
    objLisItmes.Add("List 2"); 
    objLisItmes.Add("List 3"); 
    objLisItmes.Add("List 4"); 
    return objLisItmes.ToArray(); 
} 
+0

gì sẽ thay đổi nó sẽ giúp đỡ, bằng cách trả lại mảng như thế nào?? nó sẽ giúp? –

+0

Danh sách nên làm việc tốt, và dường như là kể từ khi bạn nói rằng bạn đang nhận được trở lại danh sách các mặt hàng này. bạn có thể hiển thị html cho textbox? – JCherryhomes

+0

cảm ơn bạn :) bất kỳ cách nào nó hoạt động. bây giờ, nhưng tôi không nhận được ý tưởng tại sao ToArray() là cần thiết ở đây? –

2

Thay vì sử dụng

$('#txtEmailList') 

hãy thử sử dụng

$('input[id$="txtEmailList"]') 

Vì bạn đang sử dụng một TextBox kiểm soát máy chủ ID của bạn cho nó rất có thể kết thúc lên như một cái gì đó như "parentID1_parentID2_txtEmailList". Đoạn mã trên sẽ lấy đầu vào có một ID kết thúc bằng "txtEmailList".

Đây là cách tôi đang thực hiện nó trong dự án thử nghiệm của mình và nó đang hoạt động. Tất nhiên tôi không sử dụng AjaxPro, vì vậy tôi không chắc chắn chính xác cách bạn sẽ làm điều đó với điều đó thay vào đó, nhưng có lẽ nó sẽ cung cấp cho bạn một số ý tưởng.

<script type="text/javascript"> 
     $(function() { 
      var element = $('input[id$="TextBox1"]'); 

      element.autocomplete({ 
       source: function (request, response) { 
        $.ajax({ 
         url: "Default.aspx/GetList", 
         data: "{ 'term': '" + request.term + "' }", 
         dataType: "json", 
         type: "POST", 
         contentType: "application/json; charset=utf-8", 
         dataFilter: function(data) { return data; }, 
         success: function (data) { 
          response($.map(data.d, function (item) { 
           return { 
            value: item 
           } 
          })) 
         } 
        }) 
       } 
      }); 
     }); 
    </script> 
+0

khác biệt là gì? khi tôi truy cập trực tiếp. ? tôi nghĩ đây không phải là câu trả lời. thậm chí Hàng sắp về nó trong chức năng mở của jquery autocomplete –

+0

tôi cập nhật câu trả lời của tôi để giải thích sự khác – JCherryhomes

+0

của nó không theo quan điểm của lưới điện. để làm như thế. của nó trong hộp đồng bằng trong một div, thậm chí tôi đã kiểm tra render id, nó là giống như những gì tôi đã cung cấp trong bộ chọn jquery. do đó vấn đề sẽ xảy ra với loại phản hồi mà tôi đoán –

1

nên không nó là:

$('#txtEmailList').autocomplete({source: function(request, response) { 
    // this is the ajax call, which is running successfully 
    var msg = Assessments_JqueryAutoComplete.AutoComplete(request.term).value; //(ajaxpro functions) 
    response(msg); 
    } 

}); 

?

Nếu không, tôi khuyên bạn nên sử dụng console.log (msg) để phân tích đối tượng phản hồi nếu có thể.

1

Chỉ cần đảm bảo cuộc gọi AJAX của bạn trả lại định dạng chuỗi hợp lệ như thế này dummy example. Lưu trữ nó trong một biến. Sau đó sử dụng nó để xác định source bất động sản như thế này:

var availableValues = ["List 1","List 2","List 3","List 4"]; 
// var msg = Assessments_JqueryAutoComplete.AutoComplete(request.term).value; 
$("#txtEmailList").autocomplete({ 
    source: availableValues 
}); 
Các vấn đề liên quan