2009-06-08 17 views
8

Actualmente estoy creando una aplicación que usa ASP.NET MVC. Obtuve una entrada del usuario dentro de un área de texto y quiero mostrar este texto con < br/> s en lugar de líneas nuevas. En PHP hay una función llamada nl2br, que hace exactamente esto. Busqué en la web equivalentes en ASP.NET/C#, pero no encontré una solución que funcione para mí.Mostrar líneas nuevas desde el área de texto en ASP.NET MVC

El puño está presente (no hace nada para mí, los comentarios se acaba de imprimir sin nuevas líneas):

<% 
    string comment = Html.Encode(Model.Comment); 
    comment.Replace("\r\n", "<br />\r\n"); 
%> 
<%= comment %> 

El segundo que encontré fue esto (Visual Studio me dice VbCrLf mensaje = mensaje no está disponible en este contexto - lo he probado en vistas y controladores):

<% 
    string comment = Html.Encode(Model.Comment); 
    comment.Replace(VbCrLf, "<br />"); 
%> 
<%= comment %> 
+1

¿Seguro de los saltos de línea están realmente "\ r \ n", y no sólo "\ n" "\ r" o "\ n \ r"? –

+0

Por lo que sé, en el mundo de Windows los saltos de línea son \ r \ n;) - pero lo intenté con simplemente \ n también, no hizo ninguna diferencia. – maff

Respuesta

25

intentar (no probado a mí mismo):

comment = comment.Replace(System.Environment.NewLine, "<br />"); 

Actualizado:

acabo de probar el código - que funciona en mi máquina

ACTUALIZADO:

Otra solución:

System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
System.IO.StringReader sr = new System.IO.StringReader(originalString); 
string tmpS = null; 
do { 
    tmpS = sr.ReadLine(); 
    if (tmpS != null) { 
     sb.Append(tmpS); 
     sb.Append("<br />"); 
    } 
} while (tmpS != null); 
var convertedString = sb.ToString(); 
+0

Perfecto, gracias :) – maff

+4

¿Funciona en su máquina? http://www.codinghorror.com/blog/archives/000818.html –

+0

System.Environment.NewLine se refiere al entorno del servidor, ¿no? ¿Esto funcionaría si el navegador del cliente fuera un entorno diferente? – CoderDennis

3

para ver las etiquetas HTML como un DisplayFor

es necesario utilizar otro método, de hecho, la MVC dosent permitió que permite ver las etiquetas en la página

pero se puede utiliza esto para ignorar esta opción

@Html.Raw(model => model.text) 

buena suerte

0

@ Html.Raw (@ Model.Comment.RestoreFormatting())

y que ...

public static class StringHelper 
{ 
    public static string RestoreFormatting(this string str) 
    { 
     return str.Replace("\n", "<br />").Replace("\r\n", "<br />"); 
    } 
} 
Cuestiones relacionadas