当我使用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体验可能很快变成一场噩梦。

10-04 13:02