C# 是否可以通过编程确定ASP.NET MVC';s Razor视图';s型?

C# 是否可以通过编程确定ASP.NET MVC';s Razor视图';s型?,c#,.net,asp.net-mvc,razor,C#,.net,Asp.net Mvc,Razor,我正在手动创建一个RazorView实例,并手动将该视图呈现到我的响应输出中 var errorController = new FakeErrorController(); var controllerContext = new ControllerContext(httpApplication.Context.Request.RequestContext, errorController); var view = new Razor

我正在手动创建一个
RazorView
实例,并手动将该视图呈现到我的响应输出中

var errorController = new FakeErrorController();
var controllerContext =
    new ControllerContext(httpApplication.Context.Request.RequestContext,
                          errorController);
var view = new RazorView(controllerContext, viewPath, null, false, null);
var viewModel = new ErrorViewModel
                {
                    Exception = currentError
                };
var tempData = new TempDataDictionary();
var viewContext = new ViewContext(controllerContext, view,
                                    new ViewDataDictionary(viewModel), tempData,
                                    httpApplication.Response.Output);
view.Render(viewContext, httpApplication.Response.Output);
很好

但是请注意我是如何硬编码
ViewModel
?我想知道是否可以查看
RazorView
是否定义了强类型的
ViewModel

例如,
@model SomeNamespace.model.Foo

然后基于此创建一个新类型。我们还假设有一个无参数的默认构造函数


这可能吗?

您可以使用以下代码获取视图类型:

((ViewResult)otherController.Index()).Model.GetType()
这里的要点是,我们必须将ActionResult转换为ViewResult。但是,如果您的操作返回从ActionResult继承的其他类型(如HttpResult等),那么这还不够

有了这个类型,您可以使用反射来恢复它

但是,我们只能在方法调用之后获取类型,我相信这不是您的情况

希望这会有所帮助


注意。

该方法的推广会起作用吗

例如

public void MyMethod<T>(...)
    where T : class, new()
{
   // Your code
   var model = Activator.CreateInstance<T>();
   // More code
}
public void MyMethod(…)
其中T:class,new()
{
//你的代码
var model=Activator.CreateInstance();
//更多代码
}