ASP.NET 对 ViewModel 的 MVC 查询
ASP.NET MVC Query to ViewModel
我有一个非常简单的 ViewModel (ProductViewModel)
public class ProductViewModel
{
public int ProductID { get; set; }
public int CategoryID { get; set; }
public string ProductName { get; set; }
public string CategoryName { get; set; }
}
在我的控制器中,我正在抓取特定产品
var product = _context.Products
.Select(p => new ViewModels.ProductViewModel
{
CategoryID = p.Category.CategoryID,
ProductID = p.ProductID,
ProductName = p.ProductName,
CategoryName = p.Category.CategoryName
}).Where(p => p.ProductID == id);
return View(product);
在我看来,我将模型定义为
@model MvcApplication1.ViewModels.ProductViewModel
但是,我收到此错误:
The model item passed into the dictionary is of type 'System.Data.Entity.Infrastructure.DbQuery`1[MvcApplication1.ViewModels.ProductViewModel]', but this dictionary requires a model item of type 'MvcApplication1.ViewModels.ProductViewModel'.
我不确定为什么会抛出该错误,因为我将 ProductViewModel 传递到视图中...至少看起来像我。任何指导将不胜感激
谢谢!
您需要执行查询以取回实际的对象类型。调用 FirstOrDefault() 或 ToList() 将执行查询。还有.First(),如果执行查询后找不到item,会抛出异常。
试试这个:
Select(p => new ViewModels.ProductViewModel
{
CategoryID = p.Category.CategoryID,
ProductID = p.ProductID,
ProductName = p.ProductName,
CategoryName = p.Category.CategoryName
}).Where(p => p.ProductID == id).FirstOrDefault();//Executes the query
循环结果集也将执行查询。因此,如果您执行如下操作,则无需调用 FirstOrDefault() 或 ToList()。
foreach(var item in product)//IF YOU HAVE MULTIPLE ITEMS
item.//THIS IS A SINGLE PRODUCTVIEWMODEL INSTANCE NOW
我有一个非常简单的 ViewModel (ProductViewModel)
public class ProductViewModel
{
public int ProductID { get; set; }
public int CategoryID { get; set; }
public string ProductName { get; set; }
public string CategoryName { get; set; }
}
在我的控制器中,我正在抓取特定产品
var product = _context.Products
.Select(p => new ViewModels.ProductViewModel
{
CategoryID = p.Category.CategoryID,
ProductID = p.ProductID,
ProductName = p.ProductName,
CategoryName = p.Category.CategoryName
}).Where(p => p.ProductID == id);
return View(product);
在我看来,我将模型定义为
@model MvcApplication1.ViewModels.ProductViewModel
但是,我收到此错误:
The model item passed into the dictionary is of type 'System.Data.Entity.Infrastructure.DbQuery`1[MvcApplication1.ViewModels.ProductViewModel]', but this dictionary requires a model item of type 'MvcApplication1.ViewModels.ProductViewModel'.
我不确定为什么会抛出该错误,因为我将 ProductViewModel 传递到视图中...至少看起来像我。任何指导将不胜感激
谢谢!
您需要执行查询以取回实际的对象类型。调用 FirstOrDefault() 或 ToList() 将执行查询。还有.First(),如果执行查询后找不到item,会抛出异常。
试试这个:
Select(p => new ViewModels.ProductViewModel
{
CategoryID = p.Category.CategoryID,
ProductID = p.ProductID,
ProductName = p.ProductName,
CategoryName = p.Category.CategoryName
}).Where(p => p.ProductID == id).FirstOrDefault();//Executes the query
循环结果集也将执行查询。因此,如果您执行如下操作,则无需调用 FirstOrDefault() 或 ToList()。
foreach(var item in product)//IF YOU HAVE MULTIPLE ITEMS
item.//THIS IS A SINGLE PRODUCTVIEWMODEL INSTANCE NOW