Asp.net mvc 如何访问视图中控制器返回的匿名类型?

Asp.net mvc 如何访问视图中控制器返回的匿名类型?,asp.net-mvc,Asp.net Mvc,在mvcrc2中,我返回一个匿名对象类型&我希望在强类型视图中访问它。 假设在控制器中,我查询数据库并获取vartype中的值&我希望将其传递给强类型视图。我如何在该视图中访问它?嗯,你不能。匿名类型,无法通过名称访问。这就是重点。您不能传递类型,该类型存在于内部,您只能将该类型公开为System.Object 您总是可以使用反射来挖掘属性并以这种方式访问它们,但除此之外,没有其他方法可以绕过它 var q = new { MyProperty = "Hello World" }; var t

在mvcrc2中,我返回一个匿名对象类型&我希望在强类型视图中访问它。
假设在控制器中,我查询数据库并获取vartype中的值&我希望将其传递给强类型视图。我如何在该视图中访问它?

嗯,你不能。匿名类型,无法通过名称访问。这就是重点。您不能传递类型,该类型存在于内部,您只能将该类型公开为System.Object

您总是可以使用反射来挖掘属性并以这种方式访问它们,但除此之外,没有其他方法可以绕过它

var q = new { MyProperty = "Hello World" };
var t = q.GetType();
var hello = t.GetProperty("MyProperty").GetValue(q, null) as string;
Console.WriteLine(hello);

如果需要访问该类型,则应创建一个用户定义的对象/类型,该对象/类型可以通过名称进行标识。

您不能将其传递给强类型视图,但可以将其转换为字典并以这种方式访问属性

作为System.Web.Routing的一部分,有一个名为“RouteValueDictionary”的新对象,它可以将匿名对象作为其构造函数

MVC团队在他们的许多助手中使用了这一点

例如:

IDictionary<string, object> myDict = new RouteValueDictionary(anonymousObject);
IDictionary myDict=新的RouteValueDictionary(匿名对象);