【发布时间】:2013-10-17 15:47:05
【问题描述】:
我正在使用 RazorEngine 从网页上的 html sn-ps 解析模板。 (这是一个遗留系统,无法切换到 Mvc Razor 视图,因此我们将小部分切换为在有意义的情况下使用 RazorEngine)。 SO和互联网上有很多问题试图让Mvc的Html和Url助手与Razor引擎一起工作。为了让@Html 语法正常工作,我修改了一些找到here 的代码,将Html 添加到基本模板中:
public HtmlHelper<t> Html
{
get
{
if (helper == null)
{
var writer = this.CurrentWriter; //TemplateBase.CurrentWriter
var vcontext = new ViewContext() { Writer = writer, ViewData = this.ViewData};
helper = new HtmlHelper<t>(vcontext, this);
}
return helper;
}
}
public ViewDataDictionary ViewData
{
get
{
if (viewdata == null)
{
viewdata = new ViewDataDictionary();
viewdata.TemplateInfo = new TemplateInfo() { HtmlFieldPrefix = string.Empty };
if (this.Model != null)
{
viewdata.Model = Model;
}
}
return viewdata;
}
set
{
viewdata = value;
}
}
在对 Html 源代码进行大量调试后,我想我已经成功实例化了 Html 帮助程序所需的所有内容,并且它成功运行 @Html.Label... 问题是生成的 html 是:
<label for="MyNumber">MyNumber</label>
显然应该是:
<label for="MyNumber">MyNumber</label>
我不知道如何解决这个问题。查看 RazorEngine 源时,我无法找到编码是如何发生的。我最初的想法是 TextWriter 必须对值进行编码,但我无法确认这一点。如何让@Html.BlahFor() 呈现未转义的 html?
【问题讨论】:
-
您可能应该使用 MVC/Razor 基本类型,而不是 RazorEngine 的基本类型。
-
@SLaks,我将研究使用
WebViewPage,但它可能比弄清楚如何正确构造它更麻烦,因为 MVC 通常会处理它。此外,我将不得不在这个新的子类上重新实现 RazorEngineITemplate。我将继续寻求解决最初的问题,因为我真的不知道哪个会更努力。
标签: c# razor razorengine