当我使用Massive ORM通过.Find()方法检索记录时,它返回一个Massive.DynamicModel.Query对象,该对象与ASP.MVC 3视图的配合不太好。
控制器:
public ViewResult Details(int id)
{
// Massive ORM Find syntax requires this next statement to use 'dynamic' not 'var'
dynamic table = new Things();
// Thing will return as type Massive.DynamicModel.Query
var Thing = table.Find(ThingId:id);
return View(Issue);
}
在视图中,我尝试了@model dynamic和@model Massive.DynamicModel.Query,但都不允许我使用常规@ Model.Name语法访问“Thing”对象的属性。
这里有一些关于如何使用MVC3视图处理ExpandoObjects的讨论,但是到目前为止,对我一直有用的Massive.DynamicModel.Query实现没有什么特别的讨论。
任何一般性的想法如何将Massive.DynamicModel.Query对象转换为类型化的东西?
最佳答案
两个词:查看模型。强类型的视图模型,这就是您应该传递给视图的内容。不是动态,不是expandos,不是匿名对象,不是ViewData,不是ViewBag =>仅是强类型视图模型。因此,首先定义一个视图模型,该模型将代表该视图将使用的数据。然后,让您的控制器动作执行必要的操作,以将您的存储库吐出的任何内容转换为将传递给视图的视图模型。
未能遵循此基本规则,您的ASP.NET MVC体验可能很快变成一场噩梦。