我使用RazorEngine从网页上的HTML片段分析模板。 (这是一个遗留系统,切换到Mvc Razor视图是不可能的,所以我们将小部分切换到使用RazorEngine的地方)。有很多关于SO的问题,互联网试图让Mvc的Html和Url助手与Razor引擎一起工作。为了得到@Html
语法的工作,我已经修改了一些代码,发现here到HTML代码添加到基础模板:RazorEngine @Html助手工作,但转义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
@SLaks,我会研究使用'WebViewPage',但它可能会比麻烦更多的麻烦,因为MVC通常会处理该问题,因此找出如何正确构建它是值得的。此外,我将不得不在这个新的子类上重新实现RazorEngine'ITemplate'。我会继续寻找解决原来的问题,因为我不知道哪一个会更加努力。 – mao47