gpt4 book ai didi

asp.net-mvc - 我可以在执行之前确定强类型 ASP.NET MVC View 的模型吗?

转载 作者:行者123 更新时间:2023-12-01 12:42:01 27 4
gpt4 key购买 nike

我想在执行 View 之前从(强类型的)ASP.NET MVC 4 View 确定 View 模型类型。我的 Controller 逻辑使我能够确定 View 名称,从而以编程方式加载 View ,但是似乎没有任何东西可以提供有关模型类型的线索:

var res = ViewEngines.Engines.FindPartialView(this.ControllerContext, viewName);
if (res.View != null)
{
Type modelType = res.View.GetType(); //returns System.Web.Mvc.RazorView
//...so it would be great to be able to do:
modelType = res.View.GetModelType();//...but this does not exist
}

我想这样做的原因是因为我自动将我的域模型映射到 View 模型 - 请求包含我可以从中派生 View 名称的信息,而不是 View 模型类型,所以我想从中派生这个 View 以便进行模型映射。

最佳答案

这可以解决问题(我在 Controller 中验证了这一点,但它也可以在过滤器中运行)。

** 请注意,这适用于默认 View 引擎/默认 View 页面,否则可能需要进行调整,它不会以任何方式强化,它只是为了显示模式

Type modelType = null;

var view = ViewEngines.Engines.FindView(this.ControllerContext, "Index", string.Empty);

var bmView = (BuildManagerCompiledView)view.View;

// this need caching, no reason to call build manager again and again.
var razorView = BuildManager.GetCompiledType(bmView.ViewPath);

// this doesn't allow for customizing the page type (but not a common scenario)
if (typeof(WebViewPage).IsAssignableFrom(razorView) && razorView.BaseType.IsGenericType)
{
modelType = razorView.BaseType.GetGenericArguments()[0];
}

关于asp.net-mvc - 我可以在执行之前确定强类型 ASP.NET MVC View 的模型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23510634/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com