【问题标题】:Issue with RazorEngine, Templates and email addressesRazorEngine、模板和电子邮件地址的问题
【发布时间】:2017-08-31 20:51:52
【问题描述】:

希望有人可以提供帮助。这让我很头疼。

每当我的一个模板包含在地址的用户部分末尾包含连字符的电子邮件地址(例如 user-@domain.com)时,RazorEngine 都会抛出一个奇怪的错误。错误很长,并且对为什么动态模型不起作用等有很好的解释,但是,相关部分是

The name 'domain' does not exist in the current context.

当我将电子邮件地址更改为不具有相同 -@ 结构的电子邮件地址时,我没有使用相同的模板得到这个,所以这肯定与 RazorEngine 如何解析它有关。似乎特定序列导致 RazorEngine 将 @ 读取为 razor 命令的开始。

我尝试将“-”替换为 HTML 实体 -但结果是一样的。有没有其他人看到过这个,或者有没有人知道我可以尝试的任何其他解决方法?

【问题讨论】:

  • 请举例说明如何使用它。电子邮件地址是直接输入模板还是作为模型的一部分传入?代码有帮助。
  • 此特定示例使用直接在模板中输入的电子邮件地址。

标签: c# razor razorengine


【解决方案1】:

问题不只是连字符,问题在于 -@ 符号。它正在翻译,就好像您在模型中传递变量“域”一样,找不到它并且吓坏了。您将需要转义它,有几种方法可以这样做,也许如果您显示您的代码,那么我们可以建议采取哪条路线。最常见的解决方法是使用@Html.Raw("treaviseacton-@gmail.com")

我可以在任何地方找到 cmets 和文档,例如使用下划线作为 html 数据属性(即 data-test 应该在 razor 中作为 data_test 编写),但在我的一生中,我从未能够在任何地方找到任何文档说明原因连字符按原样处理。

【讨论】:

  • 嗨,Travis,正如我在原始帖子中所说,如果我删除连字符,模板会编译并正确运行。 @ 不是问题,特别是当它与前面的连字符结合时,但你发现了潜在的问题。我已经尝试将地址包装在 Html.Raw 中,以及今天早上转义连字符的各种方法。我会尝试同样的方法来逃避@,但看起来并不乐观。可能不得不求助于老式的字符串连接来解决它。
  • 嗨,特拉维斯,成功了。无论是否有连字符,转义 @ 都有效,不转义它仅在没有连字符时才有效。我不会假装明白为什么连字符会有所不同,但我会解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-29
  • 2016-09-19
  • 2016-10-08
  • 2011-04-19
  • 1970-01-01
  • 2014-04-18
相关资源
最近更新 更多