【问题标题】:List of "View Models" returns Null“视图模型”列表返回 Null
【发布时间】:2017-08-03 21:48:46
【问题描述】:

我使用 ViewModel 的列表实例从查询中收集数据并尝试在视图中显示。但是对象“CustomerVMlist”返回 null 且没有结果,customerlist 向我显示 4 个查询结果。而我的观点完全是空的。

public class CustomerVM
{

    public int CustomerID { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }

    public string Mobileno { get; set; }
    public Nullable<System.DateTime> OrderDate { get; set; }
    public Nullable<decimal> OrderPrice { get; set; }
}

索引函数

public ActionResult Index()
{
    List<CustomerVM> CustomerVMlist = new List<CustomerVM>(); // to hold list of Customer and order details

    var customerlist =(from Cust in db.Customers
                       join Ord in db.Orders 
                       on Cust.CustomerID equals Ord.CustomerID
                       select new 
                       { 
                           Cust.Name, 
                           Cust.Mobileno, 
                           Cust.Address, 
                           Ord.OrderDate, Ord.OrderPrice
                       }).ToList();

    foreach (var item in customerlist) 
    {
        CustomerVM VMOBJ = new CustomerVM();
        VMOBJ.Name= item.Name;
        VMOBJ.Mobileno = item.Mobileno;
        VMOBJ.Address = item.Address;
        VMOBJ.OrderDate = item.OrderDate;
        VMOBJ.OrderPrice = item.OrderPrice;
    }

    return View(CustomerVMlist);// returns null 

}

【问题讨论】:

    标签: c# linq linq-to-sql asp.net-mvc-5


    【解决方案1】:

    您需要将项目添加到列表中

     foreach (var item in customerlist) {
        CustomerVM VMOBJ = new CustomerVM();
        VMOBJ.Name= item.Name;
        VMOBJ.Mobileno = item.Mobileno;
        VMOBJ.Address = item.Address;
        VMOBJ.OrderDate = item.OrderDate;
        VMOBJ.OrderPrice = item.OrderPrice;
        CustomerVMlist.Add(VMOBJ);
     }
    

    【讨论】:

      【解决方案2】:

      您忘记在列表中添加您创建的对象。

      foreach (var item in customerlist) 
      {
          CustomerVM VMOBJ = new CustomerVM();
          VMOBJ.Name= item.Name;
          VMOBJ.Mobileno = item.Mobileno;
          VMOBJ.Address = item.Address;
          VMOBJ.OrderDate = item.OrderDate;
          VMOBJ.OrderPrice = item.OrderPrice;
      
          // after having set all the values you add the newly created object to the list.
          CustomerVMlist.Add(VMOBJ);
      }
      

      您可以使用更少的代码行来实现相同的目标,如下所示:

      public ActionResult Index()
      {
      
          var CustomerVMlist = (from Cust in db.Customers
                                join Ord in db.Orders 
                                on Cust.CustomerID equals Ord.CustomerID
                                select new CustomerVM
                                { 
                                    Name = Cust.Name, 
                                    Mobileno = Cust.Mobileno, 
                                    Address = Cust.Address, 
                                    OrderDate = Ord.OrderDate, 
                                    OrderPrice = Ord.OrderPrice
                                }).ToList();
      
          return View(CustomerVMlist)
      }
      

      如您所见,我们可以将结果投影到所需的类型CustomerVM,而无需循环遍历结果集(使用foreach),一一创建所需的对象并将它们添加到列表中。

      【讨论】:

      • 同意。谢谢。
      猜你喜欢
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多