我正在手动创建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
然后根据它创建一个新类型。让我们假设有一个无参数的默认构造函数。
这可能吗?
答案 0 :(得分:1)
您可以使用以下代码获取视图的类型:
((ViewResult)otherController.Index()).Model.GetType()
这里的要点是我们必须将ActionResult强制转换为ViewResult。但是,如果你有返回从ActionResult继承的其他类型的动作(如HttpResult等),那将是不够的。
拥有该类型,您可以使用反射来实现它。
但是,我们只能在方法调用之后获取类型,我相信这不是你的情况。
希望它会有所帮助。
问候。
答案 1 :(得分:1)
该方法的泛化是否可以解决问题?
诸如......之类的东西。
public void MyMethod<T>(...)
where T : class, new()
{
// Your code
var model = Activator.CreateInstance<T>();
// More code
}