2011-06-26 65 views
1

我想BindModel内得到模型,并将其转换为在指定的BindingContext一个类型创建:Asp.net MVC模型绑定从具体类型转换类型为使用反射

var reportFormTypeName = bindingContext.ValueProvider.GetValue(bindingContext.ModelName + ".TableInputModelTypeName"); 

Type reportFormType = Type.GetType("MyNameSpace.ViewModels." + reportFormTypeName.AttemptedValue); 

var model = (reportFormType)bindingContext.ModelMetadata.Model; 

这不会工作然而 - 我猜这是一个简单的反思,我不能让我疲惫的大脑理清 - 任何人都有任何线索?

:)

回答

1

您需要实例吧:

var reportFormTypeName = bindingContext.ValueProvider.GetValue(bindingContext.ModelName + ".TableInputModelTypeName"); 
Type reportFormType = Type.GetType("MyNameSpace.ViewModels." + reportFormTypeName.AttemptedValue); 
var model = Activator.CreateInstance(reportFormType); 
+0

问题wuith,那是我不吨;模型中有bindingContext.ModelMetadata.Model数据了 – iwayneo

+0

@iwayneo,你在做什么? –

+0

基本上这个:http://stackoverflow.com/questions/6484972/viewmodel-with-listbaseclass-and-editor-templates – iwayneo

0

你不能做到这一点。您要求编译器使用只在运行时才知道的类型,这根本不可能。如果您在编译时知道该类型,只需转换为该类型即可。如果你不这样做,你期望如何使用它?

+0

我不喜欢硬编码和切换字符串,但也许这现在是最好的方式吗? – iwayneo

+0

@iwayneo,也许有更好的办法,但如果我们要帮助你,那么你将不得不提出更具体的问题。你究竟想达到什么目的?你的代码现在如何? – svick