3

私は次のシナリオを数時間いじっています:

  • ユーザーがテキストボックスにテキストを入力すると、チェックボックスリストに動的に入力されます(ある種のautocompleteextender)。

前にも言ったように、私は何時間も(ほぼ丸一日)いじっていますが、それでも正しいアプローチを見つけることができません。私が最初に考えていたのは、dynamicpopulateコントロールとwebmethodを使用することでしたが、それを機能させることはできません。助言がありますか?

前もって感謝します。

編集済み:私がやろうとしているのは、一種のホットメール機能です。新しいメールを押してから「宛先:」ボタンを押すと、小さなウィンドウが表示されます。

4

1 に答える 1

3

コードは次のとおりです。

最初に、この関数を使用してLookup.asmxというasmxWebサービスを作成しました。

[WebMethod]
public GetUsersResponse[] LoadUsers()
{
    if (HttpContext.Current.Session["Users"] != null) 
    {
        return (List<GetUsersResponse>)HttpContext.Current.Session["Users"];
    }

    return new List<GetUsersResponse>();

}

[WebMethod]
public GetUsersResponse[] GetUsers(string query)
{
    var users = new List<string>
    {
        "Brad Pitt",
        "Brad Pitt2",
        "Brad Pitt3",
        "Angelina Jolie",
        "Jeniffer Aniston",
        "Tom Cruise",
        "Katie Holmes",
        "Tom Hanks",
        "Sean Pen",
        "Jude Law",
        "Bruce Willis"
    };

    var returnUsers = users.Where(s => s.ToLower().Trim().StartsWith(query.ToLower().Trim()))
                     .Select(s => new GetUsersResponce { Name = s })
                     .ToArray();

    HttpContext.Current.Session["Users"] = returnUsers;
    HttpContext.Current.Session["Query"] = query;
    return returnUsers;
}

public class GetUsersResponse
{
    public string Name { get; set; } 
}

Webサービスで[System.Web.Script.Services.ScriptService]アノテーションのコメントを解除してください。次に、このjquery / htmlを使用しました(jqueryを参照することを忘れないでください):

<script type="text/javascript">
    $(function () {
        $.ajaxSetup({ type: 'POST', dataType: 'json', contentType: 'application/json', data: {} });

        $.ajax({
            url: 'Lookup.asmx/LoadUsers',
            data: '',
            success: function (data) {
                var responseJson = data.d; 
                if (responseJson.length > 0) {
                    $.each(responseJson, function () {
                        $("#result").append("<li><input type='checkbox'>" + this.Name + "</input></li>")                                    
                    });
                }
            }
        });



        $("#txtType").keyup(function () {
            var input = $(this).val();
            $("#result").html("");
            if (input && input.length > 3) {
                $.ajax({
                    url: 'Lookup.asmx/GetUsers',
                    data: '{ "query": "' + input + '" }',
                    success: function (data) {
                        var responseJson = data.d; 
                        if (responseJson.length > 0) {
                            $.each(responseJson, function () {
                                $("#result").append("<li><input type='checkbox'>" + this.Name + "</input></li>")                                    
                            });
                        }
                    }
                });

            }
        });
    });
</script>
<table cellpadding="5">
    <tr>
        <td>Search</td>
        <td><asp:TextBox ID="txtType" runat="server" ClientIDMode="Static" /></td>
    </tr>
    <tr>            
        <td colspan="2">
            <ul id="result" style="list-style: none;">
            </ul>
        </td>
    </tr>
</table>

次に、jqueryを使用して、チェックされているチェックボックスを簡単に確認できます。

于 2012-06-25T03:40:25.583 に答える