【问题标题】:"Lazy" MVC5 Razor execution - ASP.NET (optimization)“懒惰”MVC5 Razor 执行 - ASP.NET(优化)
【发布时间】:2015-11-29 10:46:07
【问题描述】:

我们编写了 razor 扩展方法来在 vbhtml 视图中使用它,它可以翻译静态、非列表、非生成元素,即标题、静态导航元素等:

<h1>@Html.GetTagText("aaa"(real string), cultureCode, translationContext)</h1>

有了这个想法,我们每次调用这个方法时都会对 DB 产生 X 次调用。

问题:Razor 引擎在转换之前和转换之后是否引发了任何事件,或者 ASP.NET 页面生命周期(预渲染、渲染后)中的某种入口点,这将使我们能够:

  1. 收集所有 getTagText 调用以列出
  2. 做剩下的剃须刀工作
  3. 在一次数据库拍摄中归还所有翻译
  4. 将正确的翻译放入/替换到正确的位置

或者我的想法完全错误,剃须刀不是做那种“魔法”的好地方?我需要通用的想法,我会写一次,不要在每个控制器中重现它。

【问题讨论】:

  • 旁注:从视图中进行慢速 I/O 绑定同步调用通常是个坏主意……而且在 ASP.NET MVC6 (2016) 之前,您不能从视图中进行异步调用 -请参阅MVC6 - view components 上的信息。

标签: c# asp.net asp.net-mvc vb.net razor


【解决方案1】:

我建议您在控制器中处理此类工作。创建一个视图模型,您可以在其中放置您需要翻译的字段的翻译文本,并在控制器中填充视图模型。

我认为 MVC 视图不会引发任何事件。我试图挂钩这些类型的事件来测量页面呈现时间,但找不到任何此类挂钩。

【讨论】:

  • 好的,@steve Mallory,所以你介意更具体一点 - 在你的方法中,我应该编写某种主控制器,并从这个 parrent TranslationController 派生所有控制器,并像字符串一样解析视图?
  • @Lightning3 嗯,这是风格问题,但我想说,如果每个控制器都会进行翻译,那么编写一个基本控制器来处理这项工作是有意义的。也就是说,我可能会编写一个辅助类,非常类似于您的 GetTagText() 方法,并在我的控制器中使用该类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-07
  • 2022-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多