[英]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.