使用RazorEngine插入html以呈现为html填充模板

本文关键字:html 填充 RazorEngine 插入 使用 | 更新日期: 2023-09-27 18:03:48

我在html模板中呈现html有问题。我目前正在使用razorEngine填充模板,然后在电子邮件中使用。我有渲染问题的信息是一个url。因为客户端的要求,我们不能有可点击的电子邮件内的链接,所以我不得不有url作为一个普通的字符串,问题与电子邮件客户端是,他们会呈现一个url字符串作为一个链接,无论你是否将其定义为一个链接。为了避免这种情况,我在整个链接中添加了几个零空间图像来打破它。

这是填充模板的代码:

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

传入的数据是一个jobobject:

{
    "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

除了url,我试图渲染为html:

  • @Raw (Model.URL)

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

Microsoft.CSharp.RuntimeBinder。RuntimeBinderException: ' razorenengine . template . 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>")

有人能看到我在这里错过了什么吗?

使用RazorEngine插入html以呈现为html填充模板

Model.URL不是字符串。可能是Newtonsoft.Json.Linq.JValue。您需要首先使用

将其转换为字符串:
@Raw(Model.URL.ToString())

只是要小心,确保模型。

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

对于@Raw,请参见此处

对于IEncodedString,请参见此处