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