簡體   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