Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用RazorEngine(不是从MVC)时如何输出原始html_C#_Razor_Html Encode - Fatal编程技术网

C# 使用RazorEngine(不是从MVC)时如何输出原始html

C# 使用RazorEngine(不是从MVC)时如何输出原始html,c#,razor,html-encode,C#,Razor,Html Encode,我正在尝试生成包含HTML内容的电子邮件。此内容已通过卫生处理,因此我不担心这方面的问题,但当我打电话时: Razor.Parse(template, model); 在以下Razor模板上: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <body> @(new System.Web.HtmlString(Model.EmailConten

我正在尝试生成包含HTML内容的电子邮件。此内容已通过卫生处理,因此我不担心这方面的问题,但当我打电话时:

Razor.Parse(template, model);
在以下Razor模板上:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
    <body>
        @(new System.Web.HtmlString(Model.EmailContent))
    </body>
</html>

@(新System.Web.HtmlString(Model.EmailContent))

输出的电子邮件是HTMl编码的,但我需要解码。如何实现这一点?

RazorEngine与MVC的Razor视图引擎一样,将自动对写入模板的值进行编码。为了解决这个问题,我们引入了一个名为
IEncodedString
的接口,默认实现是
HtmlEncodedString
RawString

要使用后者,只需调用
TemplateBase
的内置
Raw
方法:

@Raw(Model.EmailContent)

仅供参考,我有一个fork,其中包含@Html.Raw(…)语法:


如果模板有自定义基类,则可以对
Write
方法进行编码,使其行为类似于普通MVC模板:如果输出值为
IHtmlString
则不应对其进行编码

下面是我在
TemplateBase
类中使用的代码:

// Writes the results of expressions like: "@foo.Bar"
public virtual void Write(object value)
{
    if (value is IHtmlString)
        WriteLiteral(value);
    else
        WriteLiteral(AntiXssEncoder.HtmlEncode(value.ToString(), false));
}

// Writes literals like markup: "<p>Foo</p>"
public virtual void WriteLiteral(object value)
{
    Buffer.Append(value);
}
//写入表达式的结果,如:“@foo.Bar”
公共虚拟无效写入(对象值)
{
如果(值为IHtmlString)
书面(价值);
其他的
WriteLiteral(AntiXssEncoder.HtmlEncode(value.ToString(),false));
}
//编写文字,如标记:“Foo

” 公共虚拟void writeleral(对象值) { Buffer.Append(值); }
我发现所有这些都对我有用

@{var myHtmlString = new HtmlString(res);}
@myHtmlString


  @MvcHtmlString.Create(res)

  @Html.Raw(res)

我正在使用RazorEngine 3.8.2,而
@Raw(Model.Content)
对我来说工作得非常好。

为RazorEngine构建了一个包装器,它添加了对
@Html.Raw()
@Html.Partial()


@Matthew很抱歉重新启动,但即使编译完成,它在VS HTML编辑器中看起来并不漂亮,它也无法识别模型或原始。有什么解决方法吗?@Jeff我认为正确的方法是RazorEngine公开一个静态类Html.cs,该类有一个静态方法.Raw,这样它将处理对Html.Raw的标准调用,该调用可用于在VS Razor编辑器中获得正确的语法高亮显示。@Manfred@Raw()在RazorEngine中工作得很好(不是ASP.NET MVC的Razor;))也希望看到这个问题得到解决。这会导致整个项目无法在启用MvcBuildViews的情况下生成…HtmlEncodedString不起作用!而是使用:RawString。请看一个有效的示例!public RazorEngine.Text.ienceodedstring GetMarcaFinalDocumento(){返回新的RazorEngine.Text.RawString(“你好!”);}我回答了这个问题,但它作为重复答案被删除,因为我在这里回答了它:。。。此答案适用于MVC和RazorEngine。您使用的MVC库在razor引擎中不可用,因此这不是问题的答案。@Html.Raw()不需要预先配置。好办法,我也是。我能够在Razor代码中生成HTML标记和值,并将其传递给ViewData查看,并使用@HTML.Ras显示(ViewData[“NextEvent”]