我正在尝试使用RazorEngine(http://razorengine.codeplex.com/)生成HTML文档.一切主要工作,但我现在的问题是,一些被正确呈现的HTML,和HTML,我已经嵌套在所呈现的文字HTML,因此而不是显示表和div的浏览器如预期的,这是显示例如
"<table></table><div></div>"
Run Code Online (Sandbox Code Playgroud)
我通过调用以下内容启动此过程:
string completeHTML = RazorEngine.Razor.Parse("InstallationTemplate.cshtml", new { Data = viewModels });
Run Code Online (Sandbox Code Playgroud)
在completeHTML随后被写入文件.
"InstallationTemplate.cshtml"定义为:
@{
var installationReport = new InstallationReport(Model.Data);
}
<!DOCTYPE html>
<html>
<head></head>
<body>
<div>
<!-- I would expect this to write the rendered HTML
in place of "@installationReport.DigiChannels()" -->
@installationReport.DigiChannels()
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
其中InstallationReport和DigiChannels定义如下:
public static class InstallationReportExtensions
{
public static string DigiChannels(this InstallationReport installationReport)
{
return installationReport.GetDigiChannelsHtml();
}
}
public class InstallationReport
{
public string GetDigiChannelsHtml()
{
// the following renders the template correctly
string renderedHtml = RazorReport.GetHtml("DigiChannels.cshtml", GetDigiChannelData());
return renderedHtml;
}
}
public static string GetHtml(string templateName, object data)
{
var templateString = GetTemplateString(templateName);
return RazorEngine.Razor.Parse(templateString, data);
}
Run Code Online (Sandbox Code Playgroud)
后GetDigiChannelsHtml()运行并返回renderedHtml,执行的线返回TemplateBase.cs到方法ITemplate.Run(ExecuteContext context),其被定义为:
string ITemplate.Run(ExecuteContext context)
{
_context = context;
var builder = new StringBuilder();
using (var writer = new StringWriter(builder))
{
_context.CurrentWriter = writer;
Execute(); // this is where my stuff gets called
_context.CurrentWriter = null;
}
if (Layout != null)
{
// Get the layout template.
var layout = ResolveLayout(Layout);
// Push the current body instance onto the stack for later execution.
var body = new TemplateWriter(tw => tw.Write(builder.ToString()));
context.PushBody(body);
return layout.Run(context);
}
return builder.ToString();
}
Run Code Online (Sandbox Code Playgroud)
当我检查时builder.ToString(),我可以看到它包含适当的HTML InstallationTemplate.cshtml内容,并转发HTML的DigiChannels.cshtml东西.例如:

如何才能@installationReport.DigiChannels()包含正确的HTML而不是当前正在执行的转义HTML?
Lee*_*ley 20
你有没有尝试过:
@Raw(installationReport.DigiChannels())
Run Code Online (Sandbox Code Playgroud)
编辑:我可以按照以下方式使用它(MVC3)
@Html.Raw(installationReport.DigiChannels())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11383 次 |
| 最近记录: |