C# &引用;“懒惰”;MVC5 Razor执行-ASP.NET(优化)

C# &引用;“懒惰”;MVC5 Razor执行-ASP.NET(优化),c#,asp.net,asp.net-mvc,vb.net,razor,C#,Asp.net,Asp.net Mvc,Vb.net,Razor,我们编写了razor扩展方法,在vbhtml视图中使用它,对静态、非列表、非生成元素(即标题、静态导航元素等)进行翻译: <h1>@Html.GetTagText("aaa"(real string), cultureCode, translationContext)</h1> @Html.GetTagText(“aaa”(真实字符串)、cultureCode、translationContext) 根据这个想法,每次调用这个方法时,我们都会生成X个对DB的调用 问题

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

<h1>@Html.GetTagText("aaa"(real string), cultureCode, translationContext)</h1>
@Html.GetTagText(“aaa”(真实字符串)、cultureCode、translationContext)
根据这个想法,每次调用这个方法时,我们都会生成X个对DB的调用

问题:Razor引擎在转换之前和转换之后是否会引发任何事件,或者ASP.NET页面生命周期(预渲染、后渲染)中是否存在某种入口点,从而允许我们:

  • 将所有getTagText调用收集到列表
  • 做剩下的剃须刀工作
  • 在一次数据库快照中返回所有翻译
  • 将正确的译文放入/替换到正确的位置

  • 或者我的想法完全错了,剃须刀不是施展这种“魔法”的好地方?我需要一个通用的想法,我会写一次,不要在每个控制器中重复这个

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


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

    旁注:从视图进行缓慢的I/O绑定同步调用通常是不好的。。。在ASP.NET MVC6(2016)之前,您不能从视图进行异步调用-请参阅上的信息。好的,@steve Mallory,所以您介意更具体一点吗-在您的方法中,我应该编写某种主控制器,并从这个parrent TranslationController派生所有控制器,并像string一样解析视图?@Lightning3 Well,这是风格的问题,但我要说的是,如果每个控制器都要进行翻译,那么编写一个基本控制器来处理这项工作是有意义的。也就是说,我可能会编写一个helper类,非常像您的
    GetTagText()
    方法,并在我的控制器中使用该类。