0

首先,请不要因为我是一个盲目地完成整个 mvc 项目的菜鸟而开枪,尽管不是一个人开始它。

所以无论如何,我对如何在数据来自数据库表的文本框中实现 jquery ui 自动完成感到完全困惑。

我尝试使用我在互联网上可以找到的东西来做这件事,这是我在我的 jquery 函数中提出的:

        $(function (){
        $("#autoCompleteText").autocomplete({
            source: function(request, response) {
                $.ajax({
                    type: "POST",
                    traditional: true,
                    dataType: "json",
                    url: "/Service/jsonAutoComplete",
                    success: function(result) {
                        response($.map(result.d, function (item){
                            return {
                                value: item.ProductName
                            }
                        }))
                    },
                    minLegth: 2
                });
            }
            });
        });

对于我的控制器中的方法,它的外观如下:

public JsonResult jsonAutoComplete(int companyId)
    {
        JsonResult result = new JsonResult();
        Products products = new Products();
        products = db.Products.FirstOrDefault(x => x.CompanyId == companyId);
        int productId = products.Id;
        SelectList select = this._selectFactory.CreateSelectListFromProductsByCompanyId(products.Id, companyId);
        result.Data = new { select = select, productId = productId };
        return result;
    }

我很确定我在这里做错了什么,因为每当我尝试在我的数据库中键入其中一个产品的前 2 个字母时都没有任何反应。

另外, $.map 到底是什么意思?我在网上看到的大多数例子都有这个,所以我认为它是必需的,但我真的不明白。

4

1 回答 1

1

您没有发送产品名称。尝试这样的事情:

$("#autoCompleteText").autocomplete({
    source: function(request, response) {
        $.ajax({
            // other settings
            data : {
                name: request.term
            }
            // other settings
        });
    }
});

现在我不太了解您正在使用的服务器端技术,但可能您必须这样做:

public JsonResult jsonAutoComplete(string name) {
    // TODO: search for products STARTING with name
    // and return it as a JSON list
}

// 编辑

$.map是一个 jQuery 函数,它将一个数组转换为另一个数组(基于“转换器”函数)。您在大多数示例中都会看到这一点,因为autocomplete插件需要特定格式的数据,而服务器的响应可能会有所不同。例如:

var A = [1,2,3,4,5];
var result = $.map( A, function(el) { return 10+el; } );
// result -> [11,12,13,14,15]
于 2012-10-31T09:00:57.820 回答