jquery autoComplete,List <string>为Source </string>

时间:2012-03-07 10:49:50

标签: jquery asp.net jquery-ui ajaxpro

我有文本框名称txtEmailList,我为它提供了自动完成列表,

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

自动填充脚本

$('#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); 
                }

            });

输出将如下所示(在firebug中显示为plain / text),如何将此数组附加到source属性。 (我不能使用$ .ajax方法,因为我需要使用ajaxpro作为office规则),所以我从ajax调用中获取数组列表,如何绑定自动完成。

  

[“List 1”,“List 2”,“List 3”,“List 4”]; / * //这是来自jquery的输出响应(来自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;
}

这是响应标头

中的firebug输出
  

Cache-Controlno-cache Content-Length40 Content-Typetext / plain;   charset = utf-8 DateWed,2012年3月7日10:45:37 GMT   期满-1Pragmano缓存

4 个答案:

答案 0 :(得分:5)

而不是返回List。我会返回一个字符串数组:

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

答案 1 :(得分:2)

而不是使用

$('#txtEmailList')

尝试使用

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

由于您使用的是服务器控件TextBox,因此您的ID很可能最终为“parentID1_parentID2_txtEmailList”。上面的代码将获取具有以“txtEmailList”结尾的ID的输入。

以下是我在测试项目中的表现,并且它正在运行。当然我没有使用AjaxPro,所以我不确定你会怎么做,但也许它会给你一些想法。

<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>

答案 2 :(得分:1)

不应该是:

$('#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); 
    }

});

如果没有,我建议你使用console.log(msg)来分析响应对象。

答案 3 :(得分:1)

请确保您的AJAX调用返回有效字符串格式,如此dummy example。 将其存储在变量中。 然后使用它来定义source属性,如下所示:

var availableValues = ["List 1","List 2","List 3","List 4"];
// var msg = Assessments_JqueryAutoComplete.AutoComplete(request.term).value;
$( "#txtEmailList" ).autocomplete({
    source: availableValues
});