PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ASP.NET] Zeilenumbrüche speichern und darstellen


Gast
2006-04-19, 12:05:58
ich habe mit .NET Framework 2 und ASP.NET (VB) ein kleines CMS entwickelt.

Ein Beitrag den man schreiben will, wird in einer Multiline-Textbox eingegeben und gespeichert. Wenn man den Text nachher noch (auch in einer Textbox) bearbeiten will, werden Zeilenumbrüche auch so angezeigt wie sie gespeichert werden einschliesslich aller Abstände etc. - also passt.
In der Datenbank kann man an den viereckigen Kästchen ;) auch erkennen, dass er diese Infromation mit gespeichert hat.

Wenn ich aber die Daten auf ganz normale Art und Weise ausgeben will, z.B. in einem Repeater-Steuerelement mit
DataBinder.Eval(Container.DataItem, "text")
werden die Zeilenumbrüche leider nicht dargestellt :(

Und in einer Textbox möchte ich das ungern dargestellt haben, sieht blöd aus.
Ideen?

Kabelsalat
2006-04-19, 12:25:14
Wenn du den Text direkt oder indirekt in den HTML-Code einfügst, müssen die Zeilenumbrüche von "\n" in "<br />" konvertiert werden. Das "\n" wird zwar bei der direkten Betrachtung des HTML-Codes zwar weiterhin berücksichtigt, aber der Parser ignoriert es. Evtl. bietet das Control auch eine Möglichkeit diese Konvertierung automatisch vorzunehmen...

Gast
2006-04-19, 13:53:29
Evtl. bietet das Control auch eine Möglichkeit diese Konvertierung automatisch vorzunehmen... nö. ein label hat sowas nich, habs auch schon mit einem panel probiert... und das repeater control kann irgendwie auch nix. Wie müsste ich etwa vorgehen, wenn ich das ganze ohne Repeater machen will?

Wenn du den Text direkt oder indirekt in den HTML-Code einfügst, müssen die Zeilenumbrüche von "\n" in "<br />" konvertiert werden. Ähem ja ich weiss was du meinst, aber wie mach ich dann das so ungefähr konkret.. bin noch nicht so gut.

Bis jetzt hab ich sowas hier in die Richtung

Ctype(Repeater1.FindControl("lblcontenttext"), label).text = "datenbankeintrag"
oder:
<div id="contenttext"></div>
' und in der codebehind.vb
contenttext.innerhtml = "datenbankeintrag"
' oder so ähnlich
' allerdings komm ich im itemcreated-event nicht an meine daten ran... :(

funktioniert noch nicht.

Eine Textbox wäre selbst als Notlösung schlecht, da die immer nur in der Höhe dargestellt wird, wie man es angibt...

hülfä

Kabelsalat
2006-04-19, 14:15:17
U.a. könntest du mit einem simplen <String>.Replace alle "\n" bei der Ausgabe durch ein <br /> ersetzen.... muss dann natürlich bei jedem Rendern geschehen. Vielleicht wäre es geschickter, den bereits fertig formatierten Text in der DB zu speichern.

Gast
2006-04-19, 14:16:22
´hm ich hab jetzt mein problem lösen können indem ich das ganze in einen <pre> tag reingemacht hab. die lösung gefällt mir aber nicht besonders. mein gedanke wäre eigentlich gewesen die zeilenumbrüche in <br />s zu verwandeln.

Gast
2006-04-19, 14:21:23
U.a. könntest du mit einem simplen <String>.Replace alle "\n" bei der Ausgabe durch ein <br /> ersetzen.... muss dann natürlich bei jedem Rendern geschehen. Vielleicht wäre es geschickter, den bereits fertig formatierten Text in der DB zu speichern.Tja, hätt ich mir vielleicht vorher überlegen sollen... Allerdings bin ich kein Fan von abspeichern von html-texten in einer datenbank, weil ich sie sonst nur wieder in html ausgeben kann, und das will ich nicht unbedingt. Und das mit dem Hin-und-Herwandeln ist auch so ne Sache. Das Ändern bei jedem Rendern ist wohl die vorgehensweise schätze ich mal... finde es schwach dass das Framework hier keine eingebaute Funktionalität mitbringt. Ist ja wohl irgendwie selbstverständlich so ne Funktion :)

Kabelsalat
2006-04-19, 14:29:26
Die eigebaute Funktion - nämlich String-Operationen - bietet es doch. Außerdem kannst du dir bei missfallen ohne weiteres ein eigenes Webcontrol, z.B. auf Basis des bestehenden Label-Controls erstellen.

Gast
2006-04-19, 14:51:27
ja kenne die funktion bin damit aber irgendwie auf die schnelle nicht ganz klargekommen damit. ausserdem müsste ich änderungen an allen datenbankoperationen vornehmen und dass ist viel zu aufwendig im augenblick. wahrscheinlich werd ich das später noch mal auf diese art und weise umsetzen, vorerst wird das pre tag seine dienste leisten....

Gast
2006-04-19, 15:07:19
hm ich hätte da noch eine andere frage.. das das bei asp.net ja mit der codebehind-datei bzw. dem konzept so massiv geändert wurde... wie kann ich denn für ein element z.b. in einem repeater oder innerhalb eines anderen controls ein ereignis schreiben??? geht das vielleicht gar nicht?

Kabelsalat
2006-04-19, 15:16:41
Klar geht das:

-> Ereignisse können weiterhin wie gewohnt registriert werden: Button.Click += new System.EventHandler(this.Button_Click);

-> Man kann den Ereignishandler im Markup (ASPX/ASCX/...-Datei) bekannt geben: <asp:linkbutton [...] onclick="Button_Click" />

Gast
2006-04-19, 15:35:27
vielen dank für den support :)