如何通过调用 Web 方法在引导 Twitter 类型提前上进行远程调用 asp.net 工作

本文关键字:调用 程调用 工作 net asp 方法 Web 何通过 类型 Twitter | 更新日期: 2023-09-27 18:30:40

我正在尝试使用bloohound's remote函数加载我的typeahead.js,我可以在其中调用我的 Web 方法。我见过类似的线程

,其中使用了querystring
  1. 将 Typeahead.js 与 ASP.Net Web方法
  2. 集成
  3. Typeahead.js 和 Bloodhound.js与 C# WebForms WebMethod 的集成
  4. http://yassershaikh.com/using-twitter-typeahead-js-with-asp-net-mvc-web-api/

还有更多....

但是,我找不到使用ajaxtypeahead.js.调用webmethod的示例

所以这就是我目前拥有的,它可以工作:

网络方法

    [WebMethod]
    public static string GetEmployeeTypeahead()
    {
        JavaScriptSerializer jss = new JavaScriptSerializer();
        jss.MaxJsonLength = 100000000;
        string json;
        using (var rep = new RBZPOS_CSHARPEntities())
        {
            var result = rep.Employees
                            .Where(x => x.EMPLOYEESTATE == 1)
                            .Select(x => new { 
                                x.EMPLOYEEID,
                                x.FULLNAME,
                                x.MANNO,
                                x.NRC
                            }).ToList();
            json = jss.Serialize(result);
        }
        return json;
    }

客户

        function LoadEmployeeJSON() {
        $.ajax({
            type: "POST",
            url: "/WebMethods/Test.aspx/GetEmployeeTypeahead",
            data: "{}",
            contentType: "application/json",
            dataType: "json",
            success: function (msg) {
                empList = $.parseJSON(msg.d);                  //otherwise does not work
                LoadEmployeeTypeahead();
            },
            error: function (msg) {
                alert("error:" + JSON.stringify(msg));
            }
        });
    }
    function LoadEmployeeTypeahead() {
        var empData = empList;
        var fullname = new Bloodhound({
            datumTokenizer: function (d) {
                return Bloodhound.tokenizers.whitespace(d.FULLNAME)
            },
            queryTokenizer: Bloodhound.tokenizers.whitespace,
            local: empData,
            limit: 10
        });
        fullname.initialize();
        // Make the code less verbose by creating variables for the following
        var fullnameTypeahead = $('#<%=txtFullName.ClientID %>.typeahead');
        // Initialise typeahead for the employee name
        fullnameTypeahead.typeahead({
            highlight: true
        }, {
            name: 'FULLNAME',
            displayKey: 'FULLNAME',
            source: fullname.ttAdapter(),
            templates: {
                empty: [
                                    '<div class="empty-message">',
                                    'No match',
                                    '</div>'
                ].join(''n'),
                suggestion: function (data) {
                    return '<h6 class="">' + data.FULLNAME + "<span class='pull-right text-muted small'><em>" + data.NRC + "</em></span>" + '</h6>';
                }
            }
        });
        var fullnameSelectedHandler = function (eventObject, suggestionObject, suggestionDataset) {
            /* See comment in previous method */
            $('#<%=txtFullName.ClientID %>').val(suggestionObject.FULLNAME);
            $('#<%=txtEmployeeID.ClientID %>').val(suggestionObject.EMPLOYEEID);
            $('#<%=txtManNo.ClientID %>').val(suggestionObject.MANNO);
            $('#<%=txtNRC.ClientID %>').val(suggestionObject.NRC);
        };
        // Associate the typeahead:selected event with the bespoke handler
        fullnameTypeahead.on('typeahead:selected', fullnameSelectedHandler);
    }
     function clearAndReInitilize() {
        $('.typeahead').typeahead('destroy');
        $('.typeahead').val('');
    }

如您所见,我正在拨打local电话而不是remote.

如何让 remote 函数调用我的webthod并填充typeahead而无需使用任何querystrings

如何通过调用 Web 方法在引导 Twitter 类型提前上进行远程调用 asp.net 工作

好的,

终于通过 ashx 泛型处理程序让它工作了。因此,我没有使用 Web 方法,而是使用以下 ashx 处理程序:

 public class Employess : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        JavaScriptSerializer jss = new JavaScriptSerializer();
        jss.MaxJsonLength = Int32.MaxValue;
        string json;
        string prefixText = context.Request.QueryString["query"];
        using (var rep = new RBZPOS_CSHARPEntities())
        {
            var result = rep.Employees
                             .Where(x => x.EMPLOYEESTATE == 1 && x.FULLNAME.Contains(prefixText.ToUpper()))
                             .Select(x => new
                             {
                                 x.EMPLOYEEID,
                                 x.FULLNAME,
                                 x.MANNO,
                                 x.NRC
                             }).ToArray();
            json = jss.Serialize(result);
        }
        context.Response.ContentType = "text/javascript";
        context.Response.Write(json);
    }
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

下面是 jquery 和 ajax 对 ashx 处理程序的调用

 $(document).ready(function () {
        $(document).ajaxStart($.blockUI).ajaxStop($.unblockUI);
        LoadEmployeeTypeahead();
      //  LoadEmployeeJSON();
    });
 function LoadEmployeeTypeahead() {
        //var empData = empList;
        var fullname = new Bloodhound({
            remote: {
                url: '/Employess.ashx?query=%QUERY',
                wildcard: '%QUERY'
            },
            datumTokenizer: function (d) {
                //var employees = $.parseJSON(msg.d);
                return Bloodhound.tokenizers.whitespace(d.FULLNAME)
            },
            queryTokenizer: Bloodhound.tokenizers.whitespace,
            limit: 10
        });
        fullname.initialize();
        // Make the code less verbose by creating variables for the following
        var fullnameTypeahead = $('#<%=txtFullName.ClientID %>.typeahead');
        // Initialise typeahead for the employee name
        fullnameTypeahead.typeahead({
            highlight: true
        }, {
            name: 'FULLNAME',
            displayKey: 'FULLNAME',
            source: fullname.ttAdapter(),
            templates: {
                empty: [
                                    '<div class="empty-message">',
                                    'No match',
                                    '</div>'
                ].join(''n'),
                suggestion: function (data) {
                    return '<h6 class="">' + data.FULLNAME + "<span class='pull-right text-muted small'><em>" + data.MANNO + "</em></span><span class='pull-right text-muted small'><em>" + data.NRC + "</em></span>" + '</h6>';
                }
            }
        });
        var fullnameSelectedHandler = function (eventObject, suggestionObject, suggestionDataset) {
            /* See comment in previous method */
            $('#<%=txtFullName.ClientID %>').val(suggestionObject.FULLNAME);
            $('#<%=txtEmployeeID.ClientID %>').val(suggestionObject.EMPLOYEEID);
            $('#<%=txtManNo.ClientID %>').val(suggestionObject.MANNO);
            $('#<%=txtNRC.ClientID %>').val(suggestionObject.NRC);
        };
        // Associate the typeahead:selected event with the bespoke handler
        fullnameTypeahead.on('typeahead:selected', fullnameSelectedHandler);
    }