Pomocnicy RazorEngine @Html działają, ale uciekają od HTML
Używam RazorEngine do analizowania szablonów z fragmentów HTML na stronie internetowej. (Jest to dotychczasowy system, w którym przełączanie na widoki maszynki Mvc nie jest możliwe, więc przełączamy małe sekcje na RazorEngine, gdzie to ma sens). Istnieje wiele pytań dotyczących SO i Internetu, które próbują zmusić pomocników HTML i Url Mvc do pracy z silnikiem Razor. Zdobyć@Html
do pracy, zmodyfikowałem znaleziony kodtutaj aby dodać HTML do szablonu bazowego:
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;
}
}
Po wielu debugowaniach w kodzie źródłowym HTML myślę, że udało mi się stworzyć instancję wszystkiego, czego potrzebuje pomocnik HTML, i działa z powodzeniem dla@Html.Label
... Problem polega na tym, że wynikowy HTML to:
<label for="MyNumber">MyNumber</label>
Kiedy to powinno być:
<label for="MyNumber">MyNumber</label>
Jestem zakłopotany co do tego, jak to naprawić. Nie udało mi się znaleźć sposobu kodowania podczas przeglądania źródła RazorEngine. Początkowo uważałem, że TextWriter musi kodować wartość, ale nie byłem w stanie tego potwierdzić. Jak mogę zdobyć@Html.BlahFor()
renderować html bez ucieczki?