我已阅读了几个与我的问题相关的帖子,但没有解决我的特定问题。在运行时铸造
下面的类包含一些信息,这些信息将被传递给一个Razor引擎进行解析。
public class ActionResult
{
public object ViewModel { get; set; }
public string View { get; set; }
}
的ActionResult.ViewModel属性会认为,可能是因为我认为需要为我的看法是强类型的任何自定义类型的视图模型类的实例。
我会新的剃须刀引擎。
var razorEngine = new RazorEngine(razorScriptFile, _moduleResult.ModuleContext, "");
然后调用一个渲染方法,它的签名是...
public void Render<T>(TextWriter writer, T model){}
我的挑战是,我不知道如何把这种使用的ActionResult实例中的信息呈现方法在运行时可用。
,如果我硬代码的方法调用它做工精细...
razorEngine.Render<MyViewModelType>(writer, actionResult.ViewModel);
,但我想我应该做的是越来越actionResult.ViewModel作为MyViewModelType或只是浇铸成MyViewModelType。但我不知道如何在运行时提供它的Type时调用razorEngine.Render()方法。
使用.NET 4.5
编辑...
我猜我想我可以做的是..
Type type = actionResult.ViewModel.GetType();
var model = actionResult.ViewModel as type;
但这不起作用
您需要使用反射,或者只是传递Object。 – SLaks
razorEngine.Render(writer,(MyViewModelType)actionResult.ViewModel)有什么问题吗?我不知道我明白了什么是困难。 – Asik
在剃须刀引擎上调用渲染方法时,模型参数需要与剃须刀视图的类型相同。我想我的缺点是如何在运行时将模型从对象类型转换为所需的自定义类型(MyViewModel)。 – JBeckton