按名称查找MVC模板视图

Vin*_*lly 5 asp.net-mvc

我正在写一个HtmlHelper扩展,我需要按名称搜索模板的存在.所讨论的模板可以是显示器或编辑器模板,具体取决于上下文.我最初的想法是使用ViewEngines.Engines.FindPartialView方法.但是,似乎此方法不搜索~/Views/Shared/DisplayTemplates~/Views/Shared/EditorTemplates目录.
我想这是有充分理由的.毕竟,如果ViewEngine没有上下文的其他信息,如何知道是否返回显示或编辑器模板?

因此,这导致了一个问题:如何搜索特定的EditorTemplate/DisplayTemplate我考虑将自定义视图引擎添加到ViewEngines集合中以包含这些位置.但是,我担心这可能会有问题.

我主要担心的是DisplayTemplate/EditorTemplate视图可能会出于意外情况而提供.有没有其他人认为这是一个问题?
仅在必要时新建特定DisplayTemplateViewEngine/ EditorTemplateViewEngine实例并使ViewEngines集合清除此特定功能是否更好?
还有什么我想念的吗?

Vin*_*lly 4

我非常喜欢 MVC 框架是开源的!我能够从 TemplateHelpers 类(MVC 运行时内部)确定渲染模板时会考虑 DataBoundControlMode。答案很简单!我所要做的就是在模板名称前加上适当的模板主管。因此,要找到一个显示模板:

var metadata = ModelMetadata.FromLambdaExpression(expression, HtmlHelper.ViewData);
ViewEngines.Engines.FindPartialView(
    _controllerContext, 
    string.Format("DisplayTemplates/{0}", metadata.TemplateHint))
Run Code Online (Sandbox Code Playgroud)

不需要额外的视图引擎或路由!如果您对该应用程序感兴趣,我的助手会为给定模型自动生成 UI 组件。我想启用自定义模板来绕过自动渲染。