Remplacer(L'Environnement.De retour à la ligne, “<br/>”) ne fonctionne pas comme prévu lors de l'affichage de texte sur une page web
Je ne sais pas pourquoi le code suivant ne fonctionne pas comme prévu:
litMessage.Text = messageBody.Replace(Environment.NewLine, "<br/>")
Où litMessage
est le nom de l'littérale de contrôle et de messageBody
est le nom de la variable de chaîne.
Mon intention est de produire une chaîne de caractères sur une page web et de remplacer les sauts de ligne avec une balise br sorte qu'il peut être affiché sur la page correctement. Cependant, rien n'est remplacé. Lors de l'affichage de la source de la page, il semble que les sauts de ligne existent encore dans la chaîne. De même, lors de l'affichage de la chaîne via MsgBox, il s'affiche normalement. J'ai aussi essayé d'emballer la sortie avec le pre
tag, et il affiche les sauts de ligne correctement.
La chaîne a été initialement entré par un utilisateur par l'utilisation d'un asp:Textbox et enregistré dans une base de données MSSQL. C'est d'extraire et d'afficher sur une autre page web à l'aide d'un asp:Littérale de contrôle. La seule chose qui arrive à la chaîne avant d'être soumis, c'est qu'il est coupé (c'est à dire textbox.Text.Trim())
.
Peut-être il ya quelque chose que je ne considère pas?
Edit #1: en Raison de contraintes de temps, j'ai décidé de simplement le texte à la ligne avec le pre
tag. Il est acceptable de travailler autour d'elle préserve les sauts de ligne. Malheureusement, il n'explique pas pourquoi le code ne fonctionne pas en premier lieu. En attendant, je vais laisser la question sans réponse jusqu'à ce que je trouve une réponse adéquate.
Edit #2: Solution trouvée et la réponse ci-dessous. UpdatePanel ajouté le tag de la question pour référence future.
pas toujours, apparemment :-): en.wikipedia.org/wiki/Newline#Representations
Galkin j'ai essayé et le résultat est le même.
OriginalL'auteur nullexception | 2011-11-24
Vous devez vous connecter pour publier un commentaire.
Après un réexamen de cette question, j'ai trouvé que les updatepanels ont été à l'origine du problème.
Faire des tests un peu plus, je l'ai regardé en ce que la chaîne contenue en utilisant le code suivant:
Tous les quatre états retourné false. Cela a été testé sur la chaîne avant de les envoyer à la base de données ainsi que sur la chaîne extraites de la base de données.
De mon point de vue, il y avait quelque chose sur le balisage qui a été enlever les sauts de ligne. Au début, je pensais que le Littéral, zone de texte, et les contrôles Label a fait quelque chose de drôle pour les sauts de ligne lorsqu'elles sont récupérées dans le code derrière. Ce n'est pas le cas (et serait bizarre si Microsoft laisser cela se produire).
Peignage à travers le code un peu plus, j'ai trouvé que l'ensemble de ces contrôles ont été à l'intérieur d'un UpdatePanel. De me souvenir de mes précédentes expériences négatives avec des UpdatePanels, j'ai alors pensé que ce pourrait bien être le coupable. Je l'ai enlevé et voilà, les sauts de ligne ne va pas loin dans le code. Le code que j'ai posté juste au-dessus de tout retourné véritable.
Les deux pages avais le contrôle de soumettre le texte et afficher le texte à l'intérieur d'un UpdatePanel. J'ai trouvé que les sauts de ligne ont disparu lors de la récupération du texte de la page. Lors de l'affichage du texte sur la page, le contrôle UpdatePanel ne modifie pas la chaîne en aucune façon. Le code suivant est terminé fonctionne très bien:
Bien que je ne suis toujours pas sûr de savoir pourquoi les sauts de ligne ont été toujours affiché correctement lors de l'utilisation de la
pre
tag ou même en affichant la valeur récupérée à l'aide d'une boîte d'alerte javascript.OriginalL'auteur nullexception
Si vous utilisez un UPDATEPANEL la
myText..Replace(Environment.NewLine, "<br/>")
ne fonctionnera PAS. J'ai découvert la manière dure (passé 2 heures déjà)La solution (lors de l'utilisation de updatepanel) est de définir un "PostBackTrigger" comme ceci:
OriginalL'auteur Robert
Il est difficile de dire à partir du code que vous avez posté, mais si vous êtes de passage le
myString
grandeur elle-même à la page (et non pas la valeur de retour de laReplace
fonction), vous aurez besoin de faire -avant de passer à la page.
OriginalL'auteur ipr101
Viens de trouver ce alors que la recherche d'une solution pour remplacer de ne pas travailler avec du texte dans la traduction littérale de contrôle alors qu'il se trouve dans un formview. La façon dont j'ai résolu c'était, dans la liaison de données pour le littéral, de transmettre le texte à une chaîne, ne le remettez en place sur la chaîne puis mettre les traités texte dans le sens littéral du champ de texte.
J'espère que cela vous aide, et toute autre personne qui visite ce site pour trouver une solution.
OriginalL'auteur Atrius
Concernant les 4 tests ci-dessus qui a échoué (auteur: nullexception)...
J'ai essayé les tests et ils ont échoué pour moi aussi. Ensuite, j'ai remarqué il n'y a pas de test pour juste vbLf, donc je l'ai testé. BINGO! Qui était-il!
Donc, cela fonctionne...
OriginalL'auteur Hal Driver
Vous pouvez l'utiliser comme ça, parce que le
System.NewLine
renvoie une"\r\n"
chaînedim messageBody as string = "texte ici";
\r\n
directement. Cela rend le code beaucoup plus portable.OriginalL'auteur Nudier Mena
litMessage.Text = messageBody.Replace("\\\\n","< br />").Replace(Environment.NewLine, "< br />")
Il a travaillé pour moi. Espérons que cela pourrait fonctionner pour vous aussi.
OriginalL'auteur Raju
J'ai perdu mes deux heures à trouver ce qui n'allait pas.
Eh bien, la solution est au lieu de l'Environnement.De retour à la ligne, à l'utilisation ControlChars.Lf
Vous pouvez supprimer updatepanel qui va régler le problème pour de futures données. Mais si vous avez déjà des données, à l'aide de ControlChars.Lf aidera.
OriginalL'auteur Gunjesh Kumar
La sortie est
Mais que faire si le texte est livré via internet et le serveur ne sait pas que \n pour un retour à la ligne sur le côté client. C'est pourquoi le Remplacer(l'Environnement.De retour à la ligne, "<br />") échoue, je veux dire de l'Environnement.Retour à la ligne est pour le côté serveur de nouvelles de la ligne, non pas du client. Les clients serait de les envoyer (char)13 + (char)10 ou \n ou le texte peut être changé via le code à l'aide de l'Environnement.De retour à la ligne. Je suis d'accord, l'utilisation de tous dans le même bloc est redondant, mais je ne pense pas d'autre moyen
OriginalL'auteur Adrian Iftode
De mettre le texte de l'étiquette à côté de la ligne, nous pouvons utiliser l'mentionnées ci-dessous la solution.
OriginalL'auteur Dayakar
Ce que vous êtes vraiment à la recherche de:
OriginalL'auteur Enter The Void
Je suis en utilisant ce code et ça fonctionne :
Au lieu de
utilisation
Espère être utile.
OriginalL'auteur ali mahmoodi