使用mvc3下拉列表进行jquery自动完成

时间:2012-05-23 20:43:40

标签: asp.net-mvc-3 jquery-ui

我正在使用带有EF Code First的ASP.NET MVC3。我之前没有使用过jQuery。我想将自动完成功能添加到绑定到我的模型的下拉列表中。下拉列表存储ID,并显示值。

那么,如何连接jQuery UI自动完成小部件以在用户输入时显示值但存储ID?

我在一个视图中也需要多个自动完成下拉列表。

我看到了这个插件:http://harvesthq.github.com/chosen/但我不确定是否要在项目中添加更多“东西”。有没有办法用jQuery UI做到这一点?

3 个答案:

答案 0 :(得分:4)

<强>更新

我刚发布了一个示例项目,展示了GitHub上文本框中的jQueryUI自动完成功能 https://github.com/alfalfastrange/jQueryAutocompleteSample


我将它与常规MVC TextBox一样使用

@Html.TextBoxFor(model => model.MainBranch, new {id = "SearchField", @class = "ui-widget TextField_220" })

这是我的Ajax调用的剪辑

它最初检查其内部缓存的搜索项目,如果没有找到它会触发Ajax请求到我的控制器操作来检索匹配的记录

$("#SearchField").autocomplete({
    source: function (request, response) {
        var term = request.term;
        if (term in entityCache) {
            response(entityCache[term]);
            return;
        }
        if (entitiesXhr != null) {
            entitiesXhr.abort();
        }
        $.ajax({
            url: actionUrl,
            data: request,
            type: "GET",
            contentType: "application/json; charset=utf-8",
            timeout: 10000,
            dataType: "json",
            success: function (data) {
                entityCache[term] = term;
                response($.map(data, function (item) {
                    return { label: item.SchoolName, value: item.EntityName, id: item.EntityID, code: item.EntityCode };
                }));
            }
        });
    },
    minLength: 3,
    select: function (event, result) {
        var id = result.item.id;
        var code = result.item.code;
        getEntityXhr(id, code);
    }
});

这不是所有的代码,但你应该能够在这里看到如何搜索缓存,然后进行Ajax调用,然后对响应做了什么。我有select部分,因此我可以使用所选值

执行某些操作

答案 1 :(得分:0)

这就是我所做的FWIW。

$(document).ready(function () {
    $('#CustomerByName').autocomplete(
    {
        source: function (request, response) {
            $.ajax(
            {
                url: "/Cases/FindByName", type: "GET", dataType: "json",
                data: { searchText: request.term, maxResults: 10 },
                contentType: "application/json; charset=utf-8",
                success: function (data) {
                    response($.map(data, function (item) {
                        return {
                            label: item.CustomerName,
                            value: item.CustomerName,
                            id: item.CustomerID
                        }
                    })
                    );
                },

            });
        },
        select: function (event, ui) {
                    $('#CustomerID').val(ui.item.id);
                },
        minLength: 1
    });

});

效果很好!

答案 2 :(得分:-1)