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

时间:2016-08-23 14:09:44

标签: c# html razor

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

这是填充模板的代码:

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的网址:

  • @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>")

谁能看到我在这里缺少的东西?

2 个答案:

答案 0 :(得分:4)

Model.URL不是字符串。这可能是Newtonsoft.Json.Linq.JValue。您需要先使用以下方法将其转换为字符串:

@Raw(Model.URL.ToString())

请注意,确保Model.URL不为空。

答案 1 :(得分:0)

对@Raw()的调用要求IEncodedString不是文字。

For @Raw, see here

For IEncodedString, see here