我使用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