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

标签 c# asp.net razor razorengine

我正在使用 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/

相关文章:

c# - Web Api 2 RESTFUL 图片上传

c# - XMLDocument.Load(url) 通过代理

asp.net - IIS Express 捕获所有子域 url

C# 加载项 Excel : ActiveSheet

c# - 登录控制台应用程序(带有 DI 的 .NET Core)

c# - 内联代码标签在某些情况下呈现为文本

c# - 当 `RoutePrefix` 或 `Route` 属性未使用时获取所有路由列表 (ASP.NET)

c# - 我如何诊断为什么 asp.net MVC 站点在一台服务器上运行但在另一台服务器上运行不正常?

c# - 让 DisplayFor(m => m.Property) 显示换行符和格式?

asp.net-mvc-3 - 我能否使用 Razor Intellisense 查看 .html 文件,就好像它们是 Visual Studio 2010 中的 .cshtml 文件一样?