我使用RazorEngine
为RazorEngine.Parse
电子邮件重用了相同的部分,但是当我在常规 View 中使用相同的部分时,new RazorEngine.Text.RawString
不起作用并且不会忽略HTML。我无法使用Html.Raw
,因为RazorEngine
无法读取它。我该如何解决?
<p>
@(new RazorEngine.Text.RawString(Model.Body))
</p>
在常规的asp.net mvc Razor View 中显示底部标记。
<p>
Welcome!<br/><br/>Body
</p>
最佳答案
您可以在创建ITemplateServiceConfiguration
实例时指定RazorEngineService
,如项目的git repository所示。
信息库中的代码:
/// <summary>
/// A simple helper demonstrating the @Html.Raw
/// </summary>
public class MyHtmlHelper
{
/// <summary>
/// A simple helper demonstrating the @Html.Raw
/// </summary>
public IEncodedString Raw(string rawString)
{
return new RawString(rawString);
}
}
/// <summary>
/// A simple helper demonstrating the @Html.Raw
/// </summary>
public abstract class MyClassImplementingTemplateBase<T> : TemplateBase<T>
{
/// <summary>
/// A simple helper demonstrating the @Html.Raw
/// </summary>
public MyClassImplementingTemplateBase()
{
Html = new MyHtmlHelper();
}
/// <summary>
/// A simple helper demonstrating the @Html.Raw
/// </summary>
public MyHtmlHelper Html { get; set; }
}
用法:
class Program
{
static void Main(string[] args)
{
var config = new TemplateServiceConfiguration();
config.BaseTemplateType = typeof(MyClassImplementingTemplateBase<>);
using (var service = RazorEngineService.Create(config))
{
string template = "<p>@Html.Raw(Model.Body)</p>";
var result = service.RunCompile(template, "templateKey", null, new { Body = "Welcome!<br /><br /><Label>Hello</label>" });
Console.WriteLine(result);
}
Console.ReadLine();
}
}
您唯一需要记住的是在创建
ITemplateServiceConfiguration
实例时提供RazorEngineService
对象。P.S:
@(new RazorEngine.Text.RawString(Model.Body))
在部分 View 中不起作用,因为它包裹在@()
周围,并且指令中的任何字符串在写入输出流之前都会被编码。关于asp.net-mvc - RazorEngine.Text.RawString在常规MVC部分 View 上不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52433559/