[英]Return data to jquery/ajax call from entity framework object in asp.net
我正在尝试使用 jquery/ajax 调用从实体框架中获取List<Product>
。 这是ajax请求。
$.ajax({
type: "POST",
url: "searchService.asmx/search",
data: "{'lookup':'itemName'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (products) {
// Just printing the result for now.
console.log(products);
}
});
Web服务中的搜索方法实现为:
[WebMethod]
public List<Product> search(string lookup)
{
using (eCommerceDBEntities context = new eCommerceDBEntities())
{
List<Product> pr = context.Products.Where(i => i.ProductName.Contains(lookup)).ToList();
return pr;
}
}
出于某种原因,我在控制台日志中收到了 500(内部服务器错误)。
令我惊讶的是,以下代码有效:
[WebMethod]
public List<Product> search(string lookup)
{
using (eCommerceDBEntities context = new eCommerceDBEntities())
{
List<Product> pr = context.Products.Where(i => i.ProductName.Contains(lookup)).ToList();
return new List<Product> {new Product(){
ProductName="abc", ProductPrice=123},
new Product(){
ProductName ="xyz", ProductPrice=321
}
};
}
}
上面硬编码的List<Product>
返回一个不错的对象,但我从数据库查询的对象没有。 我会假设它是硬编码的还是查询形式的数据库都是一样的。
我是第一次尝试这种方法,所以我可能在这里做错了什么。 如何从数据库获取数据?
如果你得到 500 看起来你在服务器端有一些例外。 你能找出异常发生的地方以及你得到了什么堆栈跟踪吗? 尝试检查Product
和context.Products
之间的类型兼容性。
List<Product> pr = context.Products.Where(i => i.ProductName.Contains(lookup)).ToList();
您也可以从客户端检查lookup
值以进行正确解析。
public List<Product> search(string lookup)
并且包含()用于有效变量。
i => i.ProductName.Contains(lookup)
尝试在您的网络方法上使用这些属性。
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
它应该工作。
您还需要检查 lambda 表达式的输出。
由于您的服务以字符串为参数,因此将contentType
更改为字符串并检查。
您还可以从 jQuery ajax 调用中删除它。
$.ajax({
type: "POST",
url: "searchService.asmx/search",
data: "{'lookup':'itemName'}",
//contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (products) {
// Just printing the result for now.
console.log(products);
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.