繁体   English   中英

想要在ASP.NET MVC实体框架应用程序中使用存储过程创建自动完成搜索

[英]Want to create autocomplete Search using stored procedure in ASP.NET MVC Entity Framework application

我已经使用数据库优先方法创建了电话簿应用程序。 而且,我必须创建一个自动完成功能。 我有写有存储过程的数据库。 我还编写了自动完成的JavaScript代码。

我的问题是,如何在控制器中调用存储过程。

我的存储过程:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[PhoneBook_SearchCustomers]
     @FName NVARCHAR(30)
AS
BEGIN
    SELECT *
    FROM UserDetails
    WHERE FName LIKE '%' + @FName + '%'
END

我的.cshtml代码是:

 <script type="text/javascript">
        $(function () {
            $("#txtCustomer").autocomplete({
                source: function (request, response) {
                    $.ajax({
                        url: '/Home/AutoComplete/',
                        data: "{ 'prefix': '" + request.term + "'}",
                        dataType: "json",
                        type: "POST",

                        contentType: "application/json; charset=utf-8",
                        success: function (data) {
                            response($.map(data, function (item) {
                                return item;
                            }))
                        },
                        error: function (response) {
                            alert(response.responseText);
                        },
                        failure: function (response) {
                            alert(response.responseText);
                        }
                    });
                },
                select: function (e, i) {
                    $("#hfCustomer").val(i.item.val);
                },
                minLength: 1
            });
        });
    </script>
    @using (Html.BeginForm("Index", "Home", FormMethod.Post))
    {
        <input type="text" id="txtCustomer" name="CustomerName" />

    }

这是我卡住的控制器。 不知道如何调用存储过程以使自动完成功能起作用。

[HttpPost]
public JsonResult AutoComplete(string prefix)
{
    using (PhoneBookDatabaseEntities entities = new PhoneBookDatabaseEntities())
    {
        var nam = entities.PhoneBook_SearchCustomers(prefix);

        var customers = (from customer in nam
                         where customer.FName.StartsWith(prefix)
                         select new
                                 {
                                     label = customer.FName,
                                 }).ToList();
        return Json(customers);
    }
}

非常感谢您的帮助。 先感谢您。

您需要在语句末尾添加.ToList() var nam = entities.PhoneBook_SearchCustomers(prefix); .ToList() var nam = entities.PhoneBook_SearchCustomers(prefix); 喜欢

var nam = entities.PhoneBook_SearchCustomers(prefix).ToList();

如果这样不能解决您的问题,请提供更多详细信息(如果有错误,请提供错误信息)。

简短答案:

在控制器中,看起来您正在使用实体框架,因此只需为存储过程调用即可:

entities.SqlQuery<YourEntityType>("storedProcedureName",params);

长答案:

从您的SP,可以说每次最终用户键入数据时,都会有一个请求发送回查询数据库。

首先,这取决于您如何处理自动完成框,这是每次用户输入字符时都会出现一个下拉列表吗?

如果是,则输入每个字符后,都会有一个查询发送回SQL DB,这可能会导致性能问题。

如果不是,您是否设计了一个用户在每次键入时都需要单击“搜索”的按钮?

一个建议是将带有参数的整个列表传递到前端,并使用正在使用的第三方JS库(如select2 )来处理它。

一个很好的例子可以在这里找到: Select2-Ultimate jQuery Autocomplete

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM