2011-03-11 17 views
18

Utilizzo il seguente comando per rendere il testo in output le interruzioni di riga immesse in un elemento HTML <textarea>.interruzioni di riga di visualizzazione asp.net mvc razor

MvcHtmlString.Create(Model.Post.Description.Replace(Environment.NewLine, "<br />")) 

C'è un modo migliore per farlo?

+0

Non vedo davvero come questo helper emetta qualsiasi interruzione di riga mentre si sostituiscono interruzioni di riga con uno spazio. –

+0

@Darin - copia/incollatura scadente da parte mia, aggiornata. – raklos

+0

dup http://stackoverflow.com/questions/5032097/asp-net-mvc-convert-n-new-line-to-html-breaks – BlackTigerX

risposta

22

Il codice è vulnerabile agli attacchi XSS in quanto non codifica il testo in HTML. Ti consiglierei di quanto segue:

var result = string.Join(
    "<br/>", 
    Model.Post.Description 
     .Split(new[] { Environment.NewLine }, StringSplitOptions.None) 
     .Select(x => HttpUtility.HtmlEncode(x)) 
); 
return MvcHtmlString.Create(result); 

e quindi a suo avviso si può tranquillamente:

@Html.SomeHelper() 
0

Forse è possibile stampare il testo all'interno di un tag pre >.

54

C'è una soluzione ancora migliore/impressionante che impiega CSS white-space property:

Con questo si evita Cross-site scripting (XSS) vulnerabilità ...

<p style="white-space: pre-line">@Model.Message</p> 

W orks come un fascino con motore ASP.NET MVC Razor.

+2

Questa dovrebbe essere in effetti la risposta accettata. Perché l'op chiede un modo migliore! – rjso

0

Funziona per me.

<p class="message"> 
@Html.Raw("<p>" + Model.Text + "</p>") 
</p> 

stringa Model.Text avere < br /> tag all'interno.

+1

Che è aperto all'attacco XSS. Posiziona '' in te 'Model.Text' e hai un vuln. – trailmax

0

Ecco la mia soluzione.

@MvcHtmlString.Create(Regex.Replace(Html.Encode(Model.Address), Environment.NewLine, "<br />", RegexOptions.Multiline)) 

e, naturalmente, sarà necessario aggiungere le seguenti istruzioni utilizzando affinché Regex funzioni.

@using System.Text.RegularExpressions 

Spero che sia utile per qualcuno.

Problemi correlati