添加数组作为jQuery自动完成的源

时间:2012-05-18 06:49:55

标签: jquery asp.net autocomplete

我需要从将数组传递到自动完成源的网络服务提供我的自动完成功能。

这是我的网络服务:

    public Filter[] getAutoComplete(string column)
    {
        List<Filter> list = new List<Filter>();

        DbAccess dbacc = new DbAccess();

          DataTable dt = dbacc.getColumnHeader(column);

          Filter _Filter = new Filter();


          if (column == "member_id")
          {
              foreach (DataRow row in dt.Rows)
              {
                  _Filter.memid = row["member_id"].ToString();
              }
          }
          else if (column == "lname")
          {
              foreach (DataRow row in dt.Rows)
              {
                  _Filter.memid = row["lname"].ToString();
              }
          }
          else if (column == "mname")
          {
              foreach (DataRow row in dt.Rows)
              {
                  _Filter.memid = row["mname"].ToString();
              }
          }
          else if (column == "fname")
          {
              foreach (DataRow row in dt.Rows)
              {
                  _Filter.memid = row["fname"].ToString();
              }
          }

        list.Add(_Filter);

        return list.ToArray();
    }

这是我的jquery ajax:

$。AJAX({

    url: "webservices/wbFilters.asmx/getAutoComplete",
    data: json,
    type: "POST",
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function (mydata) {

        $("#tags").autocomplete({
            source: mydata
        });

    }
});

我可以验证我的列表数组是否有值。我无法将其附加到我的自动填充功能上。我读到我可以添加一个数组作为源,但我真的无法让它工作。

有人可以解释为使这项工作需要做些什么吗?

3 个答案:

答案 0 :(得分:1)

对于包含多个字符串列表的自定义数据源,您需要指定要显示的属性。因此,您需要覆盖_renderItem,如下所示:

$("#tags").autocomplete({
    source: myData
}).data("autocomplete")._renderItem = function(ul, item) {
    return $( "<li></li>" )
            .data( "item.autocomplete", item )
            .append( "<a>" + item.memid + "</a>" )
            .appendTo( ul );
};

有关详细信息,请参阅:http://jqueryui.com/demos/autocomplete/#custom-data

答案 1 :(得分:0)

您是否尝试将成功功能更改为:

 success: function (mydata) {

        $("#tags").autocomplete({
            source: mydata.d
        });

    }

根据我的经验,.net将json对象包装在名为“d”

的参数中

答案 2 :(得分:0)

这对我很有用,它跟随jquery的api。

$("#Dialogs_ProjectID").autocomplete({
    source: function (request, response) {
        $.ajax({
            type: "POST",
            url: "Log.aspx/jQuery_Get_Autocomplete",
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify({
                columnName: "Project",
                startsWith: request.term
            }),
            success: function (data) {
                response($.map(data.d, function (item) {
                    return {
                        value: item
                    }
                }));
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert(errorThrown);
            }
        });
    }

});