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();
//更多代码
}