gpt4 book ai didi

c# - 如何在 RazorEngine 中使用命名空间辅助函数?

转载 作者:行者123 更新时间:2023-11-30 18:13:25 26 4
gpt4 key购买 nike

我正在使用 RazorEngine 构建一个电子邮件模板系统,并希望在与我的主模板不同的 cshtml 文件中维护辅助函数。例如,假设我有一个这样的文件夹结构:

/Templates
Support.cshtml
Registration.cshtml
Marketing.cshtml
/Helpers
/Shared
Common.cshtml
Images.cshtml
/Marketing
Ads.cshtml
Products.cshtml

我希望模板能够像这样访问助手:

<body>
@Common.Header()
<img src="@Images.Resize(@Model.ImageUrl)" />
</body>

但我希望它们具有命名空间的原因是因为我想说 Ads 团队能够编写和维护 helpers 而不必担心与 common helpers 或任何其他团队的命名冲突。他们可以自信地将助手命名为 Resize() 而不必担心 @Images.Resize 因为他们的助手将被访问为 @Ads.Resize@Marketing.Ads.Resize()

根据助手在 Razor (https://learn.microsoft.com/en-us/aspnet/web-pages/overview/ui-layouts-and-themes/creating-and-using-a-helper-in-an-aspnet-web-pages-site) 的 native 实现中的工作方式,这似乎有点可能,但我们的代码库是分布式的,因此没有 App_Code 文件夹,而且 RazorEngine 在很多方面都不同,所以我一直无法让它工作。

现在我一直在通过使用字符串连接让我的助手进入模板,这似乎也是错误的,那么有什么方法可以让我使用 RazorEngine 来完成这项工作吗?

最佳答案

Razor 页面被编译成简单的类,助手成为这些类的方法,因此您不能将它们放在命名空间下。

但是,如果您不介意将 cshtml 文件放在不同的类库项目中,则可以使用名为“Razor Generator”的扩展。

  • 从“扩展和更新”安装“razor generator”。
  • 重新启动 Visual Studio 并打开您的网络项目。
  • 添加一个新的类库项目。
  • 将新的 cshtml(例如 Ads.cshtml)文件添加到最近创建的项目中。
  • 在文件的第一行写下以下文本。

    @* 生成器:MvcHelper GeneratePrettyNames : true *@

  • 在文件中放置一些业务关键代码

    @helper PlaceAd(){ 广告

  • 在文件属性中,将“自定义工具”设置为“RazorGenerator”,并将“自定义工具命名空间”设置为您想要的命名空间

  • 从 Web 应用程序引用这个新的 dll。

  • 从任何 View 引用您的新业务关键助手

  • 利润

关于c# - 如何在 RazorEngine 中使用命名空间辅助函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52489149/

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