我想在我的视图中显示存储过程的结果。
实体框架自动为我导入了一个执行程序的方法,但是我没有得到我期望在屏幕上显示的结果。
导入的功能是:
public virtual ObjectResult<getProductsListForHome_Result> getProductsListForHome(Nullable<int> inOffer, Nullable<int> categoryId)
{
var inOfferParameter = inOffer.HasValue ?
new ObjectParameter("inOffer", inOffer) :
new ObjectParameter("inOffer", typeof(int));
var categoryIdParameter = categoryId.HasValue ?
new ObjectParameter("categoryId", categoryId) :
new ObjectParameter("categoryId", typeof(int));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<getProductsListForHome_Result>("getProductsListForHome", inOfferParameter, categoryIdParameter);
}
在ProductsController上:
//
// GET: /Products/
public ActionResult Index()
{
ObjectResult<getProductsListForHome_Result> products = db.getProductsListForHome(1, 14);
return View(products.ToList());
}
使用上面的代码,当我访问http://myapp.com/Products/
时,我收到以下消息:
传递到字典中的模型项是类型的 'System.Collections.Generic.List
1[MyApp.Models.getProductsListForHome_Result]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable
1 [MyApp.Models.bm_products]'。
我该怎么做才能解决这个问题?
答案 0 :(得分:3)
首先,写得很好的问题!
这是一个类型转换问题,看起来您的回答是接受的答案:
答案 1 :(得分:2)
您的View很可能是一个强类型的视图,它被声明为
@model System.Collections.Generic.IEnumerable<MyApp.Models.bm_products>
但是,您在控制器中传递了不同的类型,并遇到错误。
你能做什么:
为视图指定其他类型。在此之后,查看本身可能需要进行一些重构:
@model System.Collections.Generic.IEnumerable<MyApp.Models.getProductsListForHome_Result>
优选的。在控制器中运行一些代码,将从SP返回的集合转换为View可以使用的内容:
public ActionResult Index()
{
ObjectResult<getProductsListForHome_Result> products = db.getProductsListForHome(1, 14);
List<bm_products> viewProducts = products.Select(p => new bm_products{ProductName = p.Name, ProductPrice = p.Price}).ToList();
return View(viewProducts);
}