【问题标题】:How to return list linq in json in MVC Controller?如何在 MVC 控制器的 json 中返回列表 linq?
【发布时间】:2015-12-25 08:12:43
【问题描述】:
public List<Detail> GetOrderDetails()
{
    var orderDetails = (from user in db.Users
                        join detail in db.OrderDetails
                        on user.Id equals detail.UserId
                        where (detail.DateAdded != null)
                        select new Detail
                        {
                            FirstName = user.FirstName,
                            LastName = user.LastName,
                            Origin = detail.OriginCode,
                            Destination = detail.DestinationCode,
                            CarrierCode = detail.CarrierCode,
                            IsReturn = detail.IsReturn,
                            IsCancel = detail.IsCancel,
                            OrderId = detail.OrderId
                        }).FirstOrDefault();
    return Json(orderDetails);
}

这段代码给了我以下错误。

无法将类型“System.Web.Mvc.JsonResult”隐式转换为 'System.Collections.Generic.List&lt;TravelingAdmin.Controllers.Detail&gt;

【问题讨论】:

    标签: c# .net json asp.net-mvc linq


    【解决方案1】:

    问题:

    1. (your query).FirstOrDefault(); 返回一个元素而不是列表。
    2. Json(x) 将 x 转换为包含 x 的 json 表示形式的字符串。

    以下是您的选择:

    1. 如果要返回对象列表,可以删除 FirstOrDefault() 并使用 return (your query).ToList()
    2. 您可以将方法的返回类型更改为Detail而不是List&lt;Detail&gt;,然后使用return orderDetails;而不是return Json(orderDetails);

    更新:

    从你想要“在MVC控制器中返回json中的列表”的问题标题中推断出来

    你应该把方法改成这个

    public ActionResult GetOrderDetails()
    {
        var orderDetails = (from user in db.Users
                            join detail in db.OrderDetails
                            on user.Id equals detail.UserId
                            where (detail.DateAdded != null)
                            select new Detail
                            {
                                FirstName = user.FirstName,
                                LastName = user.LastName,
                                Origin = detail.OriginCode,
                                Destination = detail.DestinationCode,
                                CarrierCode = detail.CarrierCode,
                                IsReturn = detail.IsReturn,
                                IsCancel = detail.IsCancel,
                                OrderId = detail.OrderId
                            }).ToList();
    
        return Json(orderDetails, JsonRequestBehavior.AllowGet);
    }
    

    【讨论】:

    • FirstOrDefault 返回null 或一个对象。那么这不是一个列表。它将是一个对象。
    【解决方案2】:

    只需将您的返回类型更改为 JsonResult 并使用 .tolist() 方法转换为列表返回 Json(orderdetails.tolist(),jsonrequestbehaviour.allowget) 如果您通过“Post”方法发送请求,则取决于您的请求使用方法名称顶部的 [httppost] 属性并从您的代码中删除“jsonrequestbehaviour.allowget”,它将为您工作。

    【讨论】:

      猜你喜欢
      • 2017-01-17
      • 1970-01-01
      • 2017-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-13
      • 2015-08-09
      相关资源
      最近更新 更多