asp.net-mvc - asp.net mvc3 razor 语法通过反射将模型转换为其子类

标签 asp.net-mvc asp.net-mvc-3 reflection razor casting

我有一个非常简单的问题,但找不到答案。 在 Razor View 中有一个接口(interface)类型的模型。该接口(interface)有多个实现它的子类。 问题是:如何将模型转换为其实际类型? 我必须有实际类型的变量,但不知道如何从反射中获取它 即:

@model IInterface
@{
   var actualType1 = Model as Model.GetType(); // doesn't work :(
   var actualType2 = (Model.GetType()) Model; // doesn't work :(
}

正如您所想象的那样,我对 Model as ActualType(ActualType) Model 不感兴趣,因为我不知道提前会出现什么实际类型。这是一个关于技术而不是架构的问题。

提前致谢!

最佳答案

你真的走错路了。你在这里无法真正做你想做的事,因为你没有真正思考清楚。像这样的声明:

var actualType1 = Model as Model.GetType(); 

不起作用,因为 var 不是动态类型,它是在编译时而不是运行时键入的静态类型。因此,即使您能以某种方式设法让它工作,它也只能适用于一种类型(直到再次重新编译)。

除此之外,接口(interface)并不是一个好的选择,因为接口(interface)属性与实现属性是分开的。因此,无论您的类具有什么属性,您都不会通过该类的接口(interface)获取它们。

关于asp.net-mvc - asp.net mvc3 razor 语法通过反射将模型转换为其子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11832044/

相关文章:

c# - 为什么我不能两次读取 Http Request Input 流?

asp.net-mvc - 在 Entity Framework 代码优先中为同一个表定义多个外键

asp.net-mvc-3 - 处理潜在危险请求-MVC-ASP.NET

asp.net - 除非我将操作系统更改为 Win 2008 R2,否则为什么我的 Azure MVC3 站点上会出现 403?

java - 如何动态生成接口(interface)的实现

c# - 管理不同的用户角色 ASP.NET MVC

asp.net-mvc - ASP.NET MVC 4 项目 - Razor 智能感知已丢失

.net - 今年 ASP.NET MVC 3

java - 如何方便地包装对调用者敏感的 API?

reflection - 如何键入提示消除此反射警告?