Laden...

[geklärt] html aus datenbank auf aspx ausgeben

Erstellt von thepixel vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.302 Views
T
thepixel Themenstarter:in
219 Beiträge seit 2007
vor 14 Jahren
[geklärt] html aus datenbank auf aspx ausgeben

Der Titel sagts: In einer MSSQL DB ist Text mit HTML Code formatiert abgelegt. Diesen möchte ich ich eins zu eins auf einer aspx Seite ausgeben.

Gibt es dazu eine Lösung? (ausser enableEventValidation=false...)

grüße thepixel

Mfg, Christian

M
402 Beiträge seit 2005
vor 14 Jahren

Bin ich der einzige der sich fragt was das mit

"enableEventValidation=false" zu tun haben soll?

  • Daten aus der Datenbank holen
  • und mit "myDiv.innerHTML = datenvonirgendwoher"

auf der Seite ausgeben....

699 Beiträge seit 2007
vor 14 Jahren

Wie wäre es mit dem Literal Steuerelement?

Dafür ist das wie geschaffen 😉

Grüße Stephan

1.433 Beiträge seit 2006
vor 14 Jahren

Hol Dir den String doch mit AJAX und einer WebMethod aus der Datenbank. Wenn der Return Wert der WebMethod so oder so ein string ist, dann ist dort auch der ganze HTML string enthalten. Diesen kannst Du dann im OnSucceded function des Javascripts als innerHTML einem Div zuweisen (Vorteil, dann hättest Du keinen PostBack).


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Thread.Number70561._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
            <script type="text/javascript" language="javascript">
                function GetGeneratedHtml() {
                    PageMethods.GetHtmlString(onSucceded);
                }

                function onSucceded(result, usercontext, methodname) {
                    var div = document.getElementById('result');
                    div.innerHTML = result;
                }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager" runat="server" EnablePageMethods="true">
    </asp:ScriptManager>
    <div id="result" style="background-color: #C0C0C0; border-style: solid; width: 100px; height: 100px" onclick="GetGeneratedHtml();">    
    </div>
    </form>
</body>
</html>

Hier noch die WebMethod. Diese wäre in Deinem Fall ein Zugriff auf die DB und dann den dort ausgelesenen String als Rückgabetyp.


        [WebMethod]
        public static string GetHtmlString() {
            return "<input type=\"button\" id=\"test_button\" value=\"Generierter Button\" />";
        }

Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt

3.003 Beiträge seit 2006
vor 14 Jahren

Tut mir leid, aber den Tipp halte ich für den schlechtesten, den man geben kann, schaedld.

HTML per XmlHttpRequest zu übertragen, ist genau genommen nicht einmal AJAX und sollte vermieden werden. Zu übertragen sind die darzustellenden Daten, nicht die Darstellung selbst. Nur, weil es bequemer scheint, würde ich nicht aufhören, Daten und ihre Darstellung zu trennen.

LiteralControl war angesichts der Tatsache, dass da sowieso schon HTML in einer Datenbank steht (???) noch die beste Herangehensweise.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

1.433 Beiträge seit 2006
vor 14 Jahren

Tut mir leid, aber den Tipp halte ich für den schlechtesten, den man geben kann, schaedld.

Ist Ansichtssache, aber ich denke dass Du so oder so bei jedem der einen Tipp gibt Deinen als besseren hinstellen wirst.

HTML per XmlHttpRequest zu übertragen, ist genau genommen nicht einmal AJAX und sollte vermieden werden. Zu übertragen sind die darzustellenden Daten, nicht die Darstellung selbst. Nur, weil es bequemer scheint, würde ich nicht aufhören, Daten und ihre Darstellung zu trennen. Da geb ich Dir recht. Der Threadersteller hat aber ein konkretes Problem zu einen bestehenden Lösung und diese kann oder darf er eventuell aus kostengründen nicht ändern. Daher ist dieser Lösungsansatz nicht ganz verkehrt.

LiteralControl war angesichts der Tatsache, dass da sowieso schon HTML in einer Datenbank steht (???) noch die beste Herangehensweise.

LaTino

C'est le ton qui fait la musique, n'est-ce pas?

Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt

3.003 Beiträge seit 2006
vor 14 Jahren

Ist Ansichtssache, aber ich denke dass Du so oder so bei jedem der einen Tipp gibt Deinen als besseren hinstellen wirst.

Was soll das denn jetzt wieder? Meinem Post war doch deutlich zu entnehmen, dass ich einen Tipp bevorzugen würde, der nicht meiner ist (LiteralControl)...
Lies meinen Post (an den Threadersteller bitte so: "Benutz lieber LiteralControl und bitte beachte den "Ajax"-Tipp nicht, auch wenn er geeignet scheint, ist er es nicht."

Daher ist dieser Lösungsansatz nicht ganz verkehrt.

Es geht darum, dass du propagierst, HTML über XmlHttpRequest zu transportieren. Und das ist tatsächlich ganz verkehrt.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

1.433 Beiträge seit 2006
vor 14 Jahren

Es geht darum, dass du propagierst, HTML über XmlHttpRequest zu transportieren. Und das ist tatsächlich ganz verkehrt.

1. Propagiere ich nicht
2. missionieren wie Du, tu ich gar nicht
3. Die Richtigkeit einer Lösung liegt immer im Auge des Betrachters
4. Frage ich mich wie alt Du bist, denn Dein Tonfall unterscheidet sich ein wenig von den anderen Usern (die PowerUser sind).

Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt

3.003 Beiträge seit 2006
vor 14 Jahren

f'up2p, um den Thread hier nicht zu vermüllen.

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

4.207 Beiträge seit 2003
vor 14 Jahren

Ich sehe das eigentlich genauso wie LaTino - ein Literal-Control nehmen, an dessen Text-Property den HTML-Code zuweisen, und fertig.

Wozu man bei dieser Aufgabenstellung mit AJAX anfangen soll, ist mir ehrlich gesagt schleierhaft ... klar "geht" das, aber erstens war die durch AJAX erreicht Dynamik nirgends gefordert (wodurch die AJAX-Lösung das ganze verkompliziert), zweitens steht das X in "AJAX" für "XML" und nicht für "HTML", insofern sehe ich das wie LaTino als Zweckentfremdung von AJAX an.

@ schaedld: Ich weiß nicht, welches Problem Du mit LaTino (generell oder speziell in diesem Beitrag) hast, aber ehrlich gesagt ist nicht er es, der sich im Ton vergreift.

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

T
thepixel Themenstarter:in
219 Beiträge seit 2007
vor 14 Jahren

Zum Thema EnableEventValidation=true:

http://aspnetnova.blogspot.com/2009/04/pages-enableeventvalidationtrue-page.html

Leider erzeugt auch das Literal-Control den beschriebenen Fehler.

Oder ist:

<b>Text<b/><br>
Text text text text

kein valides HTML?

Mfg, Christian

3.003 Beiträge seit 2006
vor 14 Jahren

Ah, jetzt sehe ich den Grund für die Validierungsabschaltung.
Ja, ergibt Sinn. Derselbe Fehler würde übrigens erscheinen, wenn man:

a) eine ListBox mit Inhalten füllt
b) auf dem Client Inhalte entfernt / hinzufügt
c) die ListBox per PostBack verschickt

Die Controls auf der Seite stimmen einfach nicht mehr mit dem überein, was der Code-Behind erwartet => Exception. Abhängig vom konkreten HTML, was in diesem Fall übertragen und dargestellt werden soll, kann der Fehler natürlich auch auftreten. Insofern ist eine Abschaltung der Validierung die pragmatische Lösung.

LaTino

Edit:
<br> ist kein valides XHTML. <br /> wäre schon besser.
Edit2: ich und meine Edits...: ich sehe momentan mit eingeschalteter Validierung nur die Möglichkeit, die in der DB festgehaltenen HTML-Controls nach dem zerren aus der DB auch richtig zu erzeugen. Wäre aber ein ziemlicher Aufwand.

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

T
thepixel Themenstarter:in
219 Beiträge seit 2007
vor 14 Jahren

Leider kann man die Validierung nicht für einzelne Controls ausschalten, würde ungern auf einer kompletten Seite auf dieses Sicherheits-Feature verzichten. Wer weiss was der User für Unfug macht...

Mfg, Christian

3.003 Beiträge seit 2006
vor 14 Jahren

Hm, es geht nur darum, dass die Controls, von denen ASP.NET weiss, auch nach einem PostBack noch da sind.

Greift dein Code-Behind auf etwas zu, dass der User per Script entfernt hat, passiert auch nicht viel mehr, als dass eine Exception geworfen wird.

Mag sein, dass ich etwas übersehe, aber außer, dass beim Programmieren zusätzliche Sicherheit, was die Controls angeht, gewährleistet wird, sehe ich keinen wirklichen Vorteil an der Validierung.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

T
thepixel Themenstarter:in
219 Beiträge seit 2007
vor 14 Jahren

Seht Ihr eine andere Möglichkeit, einen User HTML eingeben zu lassen, diesen wegzuschreiben und aber auch wieder auszugeben?

Mfg, Christian

3.003 Beiträge seit 2006
vor 14 Jahren

Bin etwas verwirrt. An sich sollten LiteralControls keinen derartigen Fehler werfen. Dafür solltest du allerdings schon zum Dokument passendes HTML hineinpusten (i.e., wenn das Dokument als XHTML deklariert ist, sollte auch XHTML in der DB stehen, ansonsten nimm halt 4.01 transitional o.ä.).

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

T
thepixel Themenstarter:in
219 Beiträge seit 2007
vor 14 Jahren

Ich nehme mal an, UserControls (wo bei mir der Text in ein Literal geschrieben wird) übernehmen den Typ von der Page auf der sie eingebunden werden... aber leider klappt es nicht ohne eventvalidation auf false zu setzen.

Mfg, Christian