将数据从asp.net中的实体框架对象返回到jquery / ajax调用

问题描述 投票:1回答:2

我试图使用jquery / ajax调用从Entity Framework获取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>返回一个很好的对象,但我从数据库查询的那个没有。我会假设它是硬编码或查询形式数据库是一回事。

我是第一次尝试这种方法,所以我可能会在这里做一些可怕的错误。如何从DB获取数据?

c# jquery asp.net ajax entity-framework
2个回答
0
投票

如果你得到500看起来你在服务器端有一些例外。你能找出异常发生的地方和你得到的堆栈跟踪吗?尝试检查Productcontext.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)

0
投票

尝试在Web方法上使用这些属性。

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]

它应该工作。

您还需要检查lambda表达式的输出。

编辑-1

由于您的服务将字符串作为参数,因此将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);
          }
      });
© www.soinside.com 2019 - 2024. All rights reserved.