【问题标题】:Inserting html using the RazorEngine to be rendered as HTML is populated template使用 RazorEngine 插入 html 以呈现为 HTML 填充模板
【发布时间】:2016-08-23 14:09:44
【问题描述】:

我在 HTML 模板中呈现 html 时遇到问题。我目前正在使用 razorEngine 来填充我们然后在电子邮件中使用的模板。我在渲染时遇到问题的信息是一个 url。由于客户要求,我们不能在电子邮件中包含可点击的链接,因此我必须将 url 作为纯字符串,电子邮件客户端的问题是无论您是否将其定义为链接,它们都会将 url 字符串呈现为链接链接与否。为了避免这种情况,我在整个链接中添加了几个零空间图像来破坏它。

这是填充模板的代码:

Engine.Razor.Compile(content, "template");
Engine.Razor.Run("template", null, data)

传入的数据是一个JObject:

{
    "Code": "235466",
    "FirstName": "First",
    "LastName": "Last",
    "URL": "<p>http<img src=\"\" width=\"0\" height=\"0\">s:<img src=\"\" width=\"0\" height=\"0\">//test.<img src=\"\" width=\"0\" height=\"0\">test.<img src=\"\" width=\"0\" height=\"0\">com/account/forgotpassword/</p>"
}

模板中的标签与模板匹配通常如下所示:

  • @Model.FirstName
  • @Model.LastName
  • @Model.LastName

除了我试图呈现为 html 的 url:

  • @Raw(Model.URL)

尝试输入值时抛出以下错误:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'RazorEngine.Templating.TemplateBase.Raw(string)' 的最佳重载方法匹配有一些无效参数

如果我将 URL 直接放入 Raw() 中,它可以正常工作:

@Raw("<p>http<img src="" width="0" height="0">s:<img src="" width="0" height="0">//test.<img src="" width="0" height="0">test.<img src="" width="0" height="0">com/account/forgotpassword/</p>")

谁能看到我在这里遗漏了什么?

【问题讨论】:

    标签: c# html razor


    【解决方案1】:

    Model.URL 不是字符串。可能是Newtonsoft.Json.Linq.JValue。您需要先将其转换为字符串:

    @Raw(Model.URL.ToString())
    

    请小心并确保 Model.URL 不为空。

    【讨论】:

      【解决方案2】:

      对@Raw() 的调用需要一个 IEncodedString 而不是文字。

      For @Raw, see here

      For IEncodedString, see here

      【讨论】:

        猜你喜欢
        • 2022-01-17
        • 1970-01-01
        • 2017-08-02
        • 2019-06-25
        • 2012-03-03
        • 1970-01-01
        相关资源
        最近更新 更多