2012-03-12 16 views
85

Próbuję generować wiadomości e-mail z treścią HTML. zawartość ta przeszła już sanitarnych, więc nie martwię się w tym zakresie, jednak gdy zgłoszę:Jak wyprowadzać surowy html podczas korzystania RazorEngine (NIE z MVC)

Razor.Parse(template, model); 

na poniższym Razor Szablon:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<html> 
    <body> 
     @(new System.Web.HtmlString(Model.EmailContent)) 
    </body> 
</html> 

e-mail, który jest wyprowadzany jest HTML zakodowany, ale potrzebuję tego odkodowanego. Jak mogę to zrobić?

+0

Odpowiedziałem na to, ale został usunięty jako duplikat odpowiedzi, ponieważ odpowiedziałem na to tutaj: http://stackoverflow.com/questions/23603593/razorengine-cannot-use-html-raw ... ta odpowiedź działa dla obu MVC i RazorEngine. –

Odpowiedz

152

RazorEngine, podobnie jak MVC Razor View Engine, automatycznie zakoduje wartości zapisane w szablonie. Aby obejść ten problem, wprowadziliśmy interfejs o nazwie IEncodedString, z domyślnymi implementacjami: HtmlEncodedString i RawString.

Aby korzystać z tej ostatniej, po prostu nawiązać połączenie z wbudowanym Raw metody TemplateBase:

@Raw(Model.EmailContent) 
+0

Dobrze, że zadziałało! Dzięki – KallDrexx

+0

Dziękujemy! Uratowałeś mój dzień! – Sergey

+0

Uratowałem też mój dzień! – Ozzy

2

Jeśli masz niestandardową klasę bazową dla szablonów, można kodować Write sposób zachowywać się podobnie do normalnego wzorca MVC: jeżeli wartość wyjściowa jest IHtmlString nie powinno ENCO de it.

Oto kod używam w moim TemplateBase klasy:

// Writes the results of expressions like: "@foo.Bar" 
public virtual void Write(object value) 
{ 
    if (value is IHtmlString) 
     WriteLiteral(value); 
    else 
     WriteLiteral(AntiXssEncoder.HtmlEncode(value.ToString(), false)); 
} 

// Writes literals like markup: "<p>Foo</p>" 
public virtual void WriteLiteral(object value) 
{ 
    Buffer.Append(value); 
} 
0

znalazłem wszystkie z nich pracował ze mną.

@{var myHtmlString = new HtmlString(res);} 
@myHtmlString 


    @MvcHtmlString.Create(res) 

    @Html.Raw(res) 
+3

Używasz biblioteki MVC, która nie jest dostępna w maszynie brzytwy, więc nie jest to odpowiedź na pytanie. – oligofren

0

Używam RazorEngine 3.8.2 i @Raw(Model.Content) działa perfekcyjnie dla mnie.