c# - 如何在 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>
但我希望它们命名空间的原因是因为我想说广告团队能够编写和维护助手,而不必担心与普通助手或任何其他团队的命名冲突。他们可以自信地命名一个助手Resize()
而不用担心,@Images.Resize
因为他们的助手会被访问为@Ads.Resize
or @Marketing.Ads.Resize()
。
根据帮助程序在 Razor 的本机实现中的工作方式,这似乎有点可能(https://docs.microsoft.com/en-us/aspnet/web-pages/overview/ui-layouts-and-themes/creating-and- using-a-helper-in-an-aspnet-web-pages-site)但我们的代码库是分布式的,因此没有 App_Code 文件夹,而且 RazorEngine 在很多方面都不同,所以我没能让它工作。
现在我一直在通过使用字符串连接让我的助手进入模板,这似乎也是错误的,那么有没有办法可以使用 RazorEngine 进行这项工作?
解决方案
我建议将 Helper 文件夹下的代码移动到 App_Code:
1. 右键单击您的项目(不是解决方案)> 添加 > 添加 ASP.NET 文件夹 > App_Code
2. 使用@helper
语法创建模板:
@helper MakeNote(string content) {
<div class="note"
style="border: 1px solid black; width: 90%; padding: 5px; margin-left: 15px;">
<p>
<strong>Note</strong> @content
</p>
</div>
}
3. 通过声明使用您之前创建的模板@MyHelpers.MakeNote("My test note content.")
<!DOCTYPE html>
<head>
<title>Test Helpers Page</title>
</head>
<body>
<p>This is some opening paragraph text.</p>
<!-- Insert the call to your note helper here. -->
@MyHelpers.MakeNote("My test note content.")
<p>This is some following text.</p>
</body>
</html>
有关更多信息,您可以访问此链接
推荐阅读
- events - Doctrine 添加列 onSchemaCreateTable 事件
- julia - 在 Julia.Plots 中使用 GR 箭头样式
- reactjs - 为 antd 自定义验证器规则添加延迟
- javascript - 在 Google Compute Engine 上以另一个 Windows 用户身份运行启动脚本
- c# - 从 .NET MVC 中的 POST 操作方法重定向到 GET 操作方法
- sql - postgresql 与 ms sql 中的 cte
- camunda - 如何在任务分配中向组发送邮件
- windows - 你如何关闭 Mingw / Git Bash“ctrl 左键单击”打开超链接功能?
- algorithm - 大 O 类术语,但保持常量
- git - git describe tags 命令返回未知标签