2009-06-08 6 views
8

Je crée actuellement une application à l'aide de ASP.NET MVC. J'ai reçu une entrée de l'utilisateur dans une zone de texte et je veux afficher ce texte avec < br/> s au lieu de newlines. En PHP, il y a une fonction appelée nl2br, qui fait exactement cela. J'ai cherché sur le Web des équivalents dans ASP.NET/C, mais je n'ai pas trouvé une solution qui fonctionne pour moi.Afficher les nouvelles lignes de la zone de texte dans ASP.NET MVC

Le poing est ce (ne fait rien pour moi, les commentaires sont juste imprimés sans nouvelles lignes):

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

La deuxième que j'ai trouvé ce (Visual Studio me dit VbCrLf n'est pas disponible dans ce contexte - Je l'ai essayé dans les vues et contrôleurs):

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

Êtes-vous sûr que les sauts de ligne sont vraiment "\ r \ n", et non pas seulement "\ n", "\ r" ou "\ n \ r"? –

+0

Pour autant que je sache, dans le monde Windows les sauts de ligne sont \ r \ n;) - mais j'ai essayé avec juste \ n aussi, cela n'a fait aucune différence. – maff

Répondre

25

Try (non testé moi-même):

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

MISE À JOUR:

Juste testé le code - il fonctionne sur ma machine

MISE À JOUR:

Une autre solution:

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

Parfait, merci :) – maff

+4

Cela fonctionne sur votre machine? http://www.codinghorror.com/blog/archives/000818.html –

+0

System.Environment.NewLine fait référence à l'environnement du serveur, non? Cela fonctionnerait-il si le navigateur du client était un environnement différent? – CoderDennis

3

pour afficher les balises HTML comme un DisplayFor

vous devez utiliser une autre méthode, en fait, le mvc vous dosent permis d'afficher des balises dans la page

mais vous pouvez utiliser cela pour ignorer cette option

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

bonne chance

0

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

et que ...

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