【问题标题】:Prepending/appending Razor views and sections with comments when using layouts (ASP.NET MVC 4)使用布局时预先/附加带有注释的 Razor 视图和部分 (ASP.NET MVC 4)
【发布时间】:2013-10-04 19:10:20
【问题描述】:

我的剃须刀视图存储在数据库中,并通过 VirtualPathProvider 提供给站点。给定某些标志,出于调试目的,返回它们的服务将使用 HTML cmets 划分每个视图的开始和结束,包括额外的调试信息(缓存、版本控制、作者身份等)。使用布局时,只有最外层的布局视图会包括这些信息;在子布局/视图中,包含信息的 HTML cmets 不在 @section 中,因此永远不要做出响应。我希望这些 cmets 至少出现在第一个渲染部分之前,但在每个渲染部分之前和之后都会很棒。

我想知道是否有一种任何人都可以想到或已经成功的干净方法。如果重要的话,我使用的是自定义视图基类型,因此可以覆盖任何相关方法,并且我愿意覆盖视图引擎。

我目前看到的:

&lt!-- 'layout1' 的开始 --> 整个 html 响应

我最想看到的:

正文>

【问题讨论】:

  • 您可能想举例说明您想要的 html 的外观以及当前尝试的外观。主要是因为您想“包含元数据”,其中 html 具有元数据标签,但您提到“HTML cmets”,所以听起来您不是指元数据标签,而是其他一些包含元数据的方案。
  • AaronLS - 谢谢,已更新。

标签: asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

如果我没听错的话,你只需要在每个视图的开头和结尾添加这些 cmets 吗?如果您的自定义视图库是从 WebViewPage 继承的,那么这非常简单。

public class MyViewBase<T> : WebViewPage<T> 
{
    public override void ExecutePageHierarchy()
    {
        WriteLiteral("<!-- Started Layout -->");
        base.ExecutePageHierarchy();
        WriteLiteral("<!-- Ended Layout -->");
    }
}

请注意,如果您有各种编辑器或显示模板都使用相同的自定义基类,这会有点吵。

【讨论】:

  • 谢谢。有了这个,我得到了与“我目前看到的”示例相同的内容。回复开头一条评论,结尾一条评论。
  • 您的每个视图都必须从该基类继承,以便它可以在局部和其他方面工作。如果您希望所有视图都从自定义类继承,您可以从 Views/web.config 中实现。只需在其中查找 部分。如果您只希望它发生在某些视图而不是其他视图上,我不知道该怎么做
  • pageBaseType 是我正在使用的,并在基的构造函数中抛出了一个断点,以验证它正在为每个视图实例化。没有尝试过使用局部视图,但我认为它可以在那里工作,只是不适用于主视图及其布局链。
【解决方案2】:

【讨论】:

  • 谢谢!看来我必须深入研究如何破解 Razor 并自己解决这个问题。这些都是很好的资源,有美味的赏金。
  • 谢谢丹!希望这可以帮助。请稍后发布您自己的解决方案,这是一个有趣的话题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 1970-01-01
  • 2014-08-24
相关资源
最近更新 更多