C# Asp.net mvc模型绑定-从混凝土类型转换为使用反射创建的类型

C# Asp.net mvc模型绑定-从混凝土类型转换为使用反射创建的类型,c#,asp.net-mvc,asp.net-mvc-3,reflection,model-binding,C#,Asp.net Mvc,Asp.net Mvc 3,Reflection,Model Binding,我希望在BindModel期间获取模型,并将其强制转换为bindingContext中指定的类型: var reportFormTypeName = bindingContext.ValueProvider.GetValue(bindingContext.ModelName + ".TableInputModelTypeName"); Type reportFormType = Type.GetType("MyNameSpace.ViewModels." + reportFormTypeNam

我希望在BindModel期间获取模型,并将其强制转换为bindingContext中指定的类型:

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

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

var model = (reportFormType)bindingContext.ModelMetadata.Model;
然而,这是行不通的——我猜这是一个简单的反映,我无法让我疲惫的大脑去理清它——有人有任何线索吗


:)

您需要实例化它:

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

您需要实例化它:

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

你不能那样做。您要求编译器使用仅在运行时已知的类型,这是不可能的。如果您在编译时知道该类型,只需转换为它。如果没有,您希望如何使用它?

您不能这样做。您要求编译器使用仅在运行时已知的类型,这是不可能的。如果您在编译时知道该类型,只需转换为它。如果没有,您希望如何使用它?

问题是我没有;在模型中没有bindingContext.ModelMetadata.Model数据anymore@iwayneo,你想做什么?基本上是这样的:我的计划来自@Iwayno,好的,我会回答你最初的问题,因为它比这个问题清楚得多。5秒。问题是我不知道;在模型中没有bindingContext.ModelMetadata.Model数据anymore@iwayneo,你想做什么?基本上是这样的:我的计划来自@Iwayno,好的,我会回答你最初的问题,因为它比这个问题清楚得多。5秒。我不喜欢硬编码和打开字符串,但也许这是目前最好的方法?@Iwayno,也许有更好的方法,但如果我们想帮助你,你必须问一个更具体的问题。你到底想达到什么目的?你的代码现在看起来怎么样?我不喜欢硬编码和打开字符串,但也许这是目前最好的方法?@Iwayno,也许有更好的方法,但如果我们要帮助你,你必须问一个更具体的问题。你到底想达到什么目的?您的代码现在看起来怎么样?