kirk651 Ответов: 1

Asp NET автозаполнение


Привет!

Я пытаюсь сделать автозаполнение, но я застрял, когда я начинаю печатать, ничего не происходит. Я не знаю, чего мне не хватает.

Мой HTML-код:
<%@ Page Title="Create" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Create.aspx.cs" Inherits="FeladatLap2.ProjectViews.Create"%>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
   <script src="../Scripts/jquery-ui-1.8.20.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            var ajaxCall = location.href + "/GetUserList";

            $("#MainContent_txtName").autocomplete({
                minLength: 0,
                source: function (request, response) {
                    $.ajax({
                        type: "POST",
                        url: ajaxCall,
                        data: JSON.stringify({ 'prefixText': request.term }),
                        dataType: "json",
                        contentType: "application/json; charset=utf-8",
                        success: function (data) {
                            response($.map(data.d, function (item) {
                                return {
                                    label: item,
                                    value: item
                                };
                            }));
                        },
                        error: function (err, status, error) {
                            console.log(status);
                            console.log(error);
                        }
                    });
                }
            });
        });
    </script>
    <h2>Test</h2>
    <div>
        <table>
             <tr>
                <td>
                    Name:</td>
                    <td colspan="3">
                    <asp:TextBox ID="txtName" runat="server"></asp:TextBox>
                    </td>
            </tr>
            </table>
    </div>
</asp:Content>


Мой отделенного кода:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using FeladatLap2.Models;
using System.Web.Services;

namespace FeladatLap2.ProjectViews
{
    public partial class Create : System.Web.UI.Page
    {

.....

 [WebMethod]
        public static string[] GetUserList(string prefixText)
        {
            prefixText = prefixText.ToLower();
            List<Users> users = new List<Users>();
            BL.UsersManager usm = new BL.UsersManager();
            users = usm.GetAllUsers();
            var list = users.Where(u => u.Name.ToLower().Contains(prefixText))
                        .Select(u => String.Format("{0} ({1})", u.Name, u.Tsz))
                        .Take(10);

            return list.ToArray();
        } 
    }
}


Что я уже пробовал:

Я пробовал молиться, гуглить.

1 Ответов

Рейтинг:
10

kirk651

Итак, я изменил свой сценарий на этот:

<script src="../Scripts/jquery-ui-1.12.1.js"></script>
<script type="text/javascript">
// if you use jQuery, you can load them when dom is read.
$(document).ready(function () {
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_initializeRequest(InitializeRequest);
    prm.add_endRequest(EndRequest);

    // Place here the first init of the autocomplete
    InitAutoCompl();
    InitAutoCompl2();
});

    function InitializeRequest(sender, args) {
    }

    function EndRequest(sender, args) {
        // after update occur on UpdatePanel re-init the Autocomplete
        InitAutoCompl();
        InitAutoCompl2();
    }

    function InitAutoCompl() {
        $("#<%=txtName.ClientID %>").autocomplete({
            source: function (request, response) {
                $.ajax({
                    url: '<%=ResolveUrl("~/ProjectViews/AutoComplete.asmx/GetUsers") %>',
                    data: "prefixText=" + JSON.stringify(request.term),
                    dataType: "json",
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {
                        response($.map(data.d, function (item) {
                            return {
                                label: item,
                                value: item
                            };
                        }));
                    },
                    error: function (response) {
                        alert(response.responseText);
                    },
                    failure: function (response) {
                        alert(response.responseText);
                    }
                });
            },
            minLength: 1
        });
    }

И мой код в моем коде в моем .asmx:
public class AutoComplete : System.Web.Services.WebService
{
    [WebMethod]
    [ScriptMethod(UseHttpGet = true)]
    public string[] GetUsers(string prefixText)
    {
        prefixText = prefixText.ToLower();
        List<Users> users = new List<Users>();
        BL.UsersManager usm = new BL.UsersManager();
        users = usm.GetAllUsers();
        var list = users.Where(u => u.Name.ToLower().Contains(prefixText))
                    .Select(u => String.Format("{0} ({1}) - {2}", u.Name, u.Tsz, u.OrganizationUnit.OrganizationUnitName))
                    .Take(10);

        return list.ToArray();
    }


Я надеюсь, что это поможет другим.


Patrice T

Воспользуйся Принять ответ чтобы закрыть вопрос.