Laden...

c#Funktion aus dynamisch erstelltem HTML aufrufen?

Erstellt von qazeem vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.917 Views
qazeem Themenstarter:in
103 Beiträge seit 2006
vor 17 Jahren
c#Funktion aus dynamisch erstelltem HTML aufrufen?

Hallo,

Folgendes Problem: Ich greife auf ein Wort in ner SQL Datenbank zu und setze dieses Wort in meine Webseite. Im C# Code habe ich also einen String.

Jetzt will ich aber auf dieses Wort klicken und eine C# Funktion aufrufen, welche weitere Daten aus der Datenbank zieht.

Wie muss ich also den String verändern und auf was muss dabei geachtet werden?

Geht das irgendwie mit onclick? oder a href? oder EventHandlern oder javascript:__dopostback?. Hab viel ausprobiert, aber...

Suche jedenfalls die einfachste Lösung.

F
722 Beiträge seit 2005
vor 17 Jahren

Du könntest statt einem String ein LinkButton auf deiner Page erstellen und dafür das Click-Event anmelden.

2.921 Beiträge seit 2005
vor 17 Jahren

Wenn Du nur den Internet-Explorer benutzt, kannst Du das über ein mit .NET erstelltes ActiveX machen. Ja das geht!!! Aber nur managed.
Dann geht nur mit dem IE.

Du kannst auch den Webbrowser in deinem Programm benutzen und die events abfangen.
Dann gehts nur über den Webbrowser in deinem Programm.

Wenn es irgendein-Browser sein soll, dann mit GetGUIThreadInfo-API das Handle des aktuellen Carets abrufen, dort den selektierten Text ermitteln (wie man die Selektion ermittelt müsste ich auch erst in Erfahrung bringen) und dann natürlich wie gehabt weitermachen. Dann ginge es für jedes Windows-Programm.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

1.130 Beiträge seit 2005
vor 17 Jahren

Hallo qazeem,

Du sprichst tatsächlich von einer einfachen Html-Seite ohne serverseitigen Code? Wenn ja, dann kannst Du einen einfachen Link in Verbindung mit JavaScript verwenden. Den weiteren Weg kannst Du dann per AJAX realisieren.

Sollte es sich bei Deiner Seite doch etwas um eine aspx (also mit serverseitigen) Code handeln, dann verwendest Du einfach ein LinkButton in Verbindung mit einer OnClick Methode.

qazeem Themenstarter:in
103 Beiträge seit 2006
vor 17 Jahren

Also, das sagt mir nicht viel. Natürlich will ich es so machen, dass es mit allen Browsern funzt.

Beispiel:
Rufe aus der Datenbank folgendes Wort ab: Rechne

im C#Programm:

string Link1 = "Rechne"
// um ihn auf die Webseite zu bringen
Link1 = "<td onclick=Rechne();>" + Link1 + </td>"

zack... die Zeile wird auf die HP gebracht.

Jetzt will ich draufklicken und er soll die Funktion im C# Programm aufrufen:

private void Rechne(sender o, EventArg e);

Das funzt natürlich net. Aber so in der Art muss das doch gehen.

Oder habt ihr das richtig erklärt und ich hab das nur nicht gepeilt?

qazeem Themenstarter:in
103 Beiträge seit 2006
vor 17 Jahren

Ja es handelt sich also um eine aspx Anwendung mit serverseitigem Code.

Genau das mit dem LinkButton sollte eigentlich funktionieren.

Kannst du mir sagen, wie ich die Zeile per Hand reinsetze und ob ich noch auf etwas achten muss, damit er die Funktion im serverseitigem Code findet?

1.130 Beiträge seit 2005
vor 17 Jahren

Original von qazeem
Also, das sagt mir nicht viel. Natürlich will ich es so machen, dass es mit allen Browsern funzt.

Von verschiedenen Browsers hatte ich nichts geschrieben.

Original von qazeem
Jetzt will ich draufklicken und er soll die Funktion im C# Programm aufrufen

Mir scheint Dir fehlt das grundsätzlich Verständnis in Bezug auf ASP.NET.
Du suchst das LinkButton Control.

Mehr Infos findest Du unter http://quickstarts.asp.net/QuickStartv20/aspnet/doc/ctrlref/standard/linkbutton.aspx

qazeem Themenstarter:in
103 Beiträge seit 2006
vor 17 Jahren

Bin zwar kein Profi aber das grundsätzliche Verständnis habe ich.

Das mit den Browsern und der Satz: "Das sagt mir nicht viel." war auf die Beiträge zuvor bezogen. Egal.

Ich weiss auch was ein LinkButton ist. Das Problem ist nur, dass der Code der die serverseitige Funktion aufrufen soll auch serverseitig erstellt wird. Ich kann also nicht einfach ein LinkButton hinziehen, doppelklick draufklicken und dort die Funktion LinkButton_Click() definieren.

das heisst ich muss den ASP Code selber erstellen und den Verweis auch.

Wenn man ein einfaches Beispiel mit dem LinkButton erstellt und dann den Code im WebBrowser anschaut, ist der Code verändert: die javascript:__dopostback funktion wird verwendet.

1.130 Beiträge seit 2005
vor 17 Jahren

Hallo qazeem,

dann erstelle Dir das Control dynamisch. Wie man das macht, findest Du mit Hilfe der Suche.

qazeem Themenstarter:in
103 Beiträge seit 2006
vor 17 Jahren

Hallo,

ich glaube nicht dass mir die dynamische Erstellung eines LinkButtons weiterhilft, also sowas in der Art:

LinkButton eintrag = new LinkButton();
eintrag.Text = "YO";
eintrag.Click = new EventHandler(LinkButton5_Click1);
PlaceHolder1.Controls.Add(eintrag);

Mein Code sieht so aus:

private string Get_Vehicle_List(int prm_user_id)
    {
         string str_vehicle;
        //... DATENBANKABFRAGE: Ergebnis: Array mit unbekannter Anzahl von Einträgen
        if (objdb.Query_State) // Datenbankabfrage erfolgreich
        {
            while (objdb.Query_RS.Read()) // Einträge existieren --> Einträge verarbeiten
            {
                string Vehicle_KZ = objdb.Query_RS.GetValue(0).ToString();
                str_vehicle += "<tr><td><asp:LinkButton runat=\"server\" OnClick=\"LinkButton_Click\">" + Vehicle_KZ + "</asp:LinkButton></td></tr>\n";

            }
            objdb.Query_RS.Close();
        }
        
        return str_vehicle;
    }

Dieser str_vehicle wird also zurückgegeben und über einen Platzhalter oder ein Literal Werkzeug in die Seite dynamisch eingebaut.

Was für Möglichkeiten habe ich denn diese Einträge auf serverseitige Funktionen zu verlinken. Das mitdem <asp:LinkButton... OnClick ...> funktioniert nicht.

1.130 Beiträge seit 2005
vor 17 Jahren

Hallo qazeem,

Original von qazeem
ich glaube nicht dass mir die dynamische Erstellung eines LinkButtons weiterhilft, also sowas in der Art:

Doch, genau das tut es. Du kannst es drehen und wenden wie Du willst, mit der von mir vorgeschlagenen Lösung kommst Du direkt zum Ziel. Mal abgesehen davon das Dein Weg nicht ganz die feine Art ist und ASP.NET grundsätzlich wiederspricht.

qazeem Themenstarter:in
103 Beiträge seit 2006
vor 17 Jahren

Hi , ich bins nochmal,...

Soll das so in der Art funktionieren

protected void Page_Load(object sender, EventArgs e)
    {
        int i = 0;
        while(i < 5)
        {
            LinkButton[] link;
            link[i]   = new LinkButton();
            link[i].Text = i.ToString();
            link[i].ID = i.ToString();
            link[i].Click += new EventHandler(Yeah_Click);

            Literal[] lit;
            lit[i].Text = "<br>";

            PlaceHolder1.Controls.Add(link[i]);
            PlaceHolder1.Controls.Add(lit[i]);
            i++;
        }
    }

    protected void Yeah_Click(object sender, EventArgs e)
    {
        Label1.Text = "Es funktioniert !!!";
    }

Jedenfalls funktioniert der Code nicht. Fehler mit den Variablen link und lit.

Mein Problem: Will einfach nur im Page_Load ne Liste laden, die Einträge stammen aus einer Datenbank. Jeder Eintrag verweist auf das selbe Event mit unterschiedlichen Argumenten.

Ist das Problem so kompliziert? oder bin ich einfach zu dumm?

F
722 Beiträge seit 2005
vor 17 Jahren
1.130 Beiträge seit 2005
vor 17 Jahren

Hallo qazeem,

Du erstellst ein Array, initialisierst dies aber nicht. Des Weiteren hingt der Code noch an div. anderen Stellen.

Ungetestet:


for(int i = 0; i < 5;i++)
{
    LinkButton lnkBtt = new LinkButton();
    lnkBtt.Text = i.ToString();
    lnkBtt.ID = "ID" + i;
    lnkBtt.Click += new EventHandler(Yeah_Click);

    Literal lit = new Literal();
    lit.Text = "<br />";

    PlaceHolder1.Controls.Add(lnkBtt);
    PlaceHolder1.Controls.Add(lit);
}

protected void Yeah_Click(object sender, EventArgs e)
{
    Label1.Text = "Es funktioniert !!!";
} 

qazeem Themenstarter:in
103 Beiträge seit 2006
vor 17 Jahren

Krass. Der Code funktioniert. Das müsste mir weiterhelfen.

Mein letztes Problem: Wie übergebe ich jetzt der Funktion ein Argument, so dass er mir für jeden LinkButton folgendes ausgibt: Es funktioniert: 0, Es funktioniert: 1, usw....

1.130 Beiträge seit 2005
vor 17 Jahren

Hallo qazeem,

schau Dir die Attribute OnCommand, CommandName u. CommandArgument an.

qazeem Themenstarter:in
103 Beiträge seit 2006
vor 17 Jahren

Hallo Kai,

genial das funktioniet mit den command attributen.

Jetzt will ich das ganze allerdings in eine Tabelle bauen oder in eine Liste.

Wie benutzt man das Literal Werkzeug genau. Du hast vorhin den Literal Text= <br** /**>

Damit hat der Zeilenumbruch funktioniert. Warum musste man den / hinsetzen?

Warum funktioniert das nicht:

Literal lit1 = new Literal();
            lit1.Text = "<tr><td>";
            Literal lit2 = new Literal();
            lit2.Text = "</td></tr>";

            PlaceHolder1.Controls.Add(lit1);
            PlaceHolder1.Controls.Add(lnkBtt);
            PlaceHolder1.Controls.Add(lit2);

Auch wenn ich den / vor die > setze, bekomme ich kein Ergebnis.

F
722 Beiträge seit 2005
vor 17 Jahren

<br /> ist die XML-valide Variante des Zeilenumbruchs.

qazeem Themenstarter:in
103 Beiträge seit 2006
vor 17 Jahren

und wie funktioniert das mit der Tabelle?

F
722 Beiträge seit 2005
vor 17 Jahren

Dafür gibt es in ASP.NET das Table und das DataGrid Control. Ansonsten hilft natürlich auch immer selfhtml.org =)

1.130 Beiträge seit 2005
vor 17 Jahren

Original von feadur
Dafür gibt es in ASP.NET das Table und das DataGrid Control. Ansonsten hilft natürlich auch immer selfhtml.org =)

Ich hätte es nicht besser sagen können. Schau dir am besten mal alle ASP.NET Control an: http://www.asp.net/quickstart

qazeem Themenstarter:in
103 Beiträge seit 2006
vor 17 Jahren

Danke Leute,

einen DataGrid habe ich jetzt nicht benutzt.

Aber ich glaube so sollte das funktionieren und tuts auch für das kleine Beispiel:

    protected void Page_Load(object sender, EventArgs e)
    {
        for (int i = 0; i < 5; i++)
        {
            TableRow tr = new TableRow();
            TableCell tc = new TableCell();
            
            LinkButton lnkBtt = new LinkButton();
            lnkBtt.Text = i.ToString();
            lnkBtt.ID = "ID" + i;
            lnkBtt.Command += new CommandEventHandler(Yeah_Click);
            lnkBtt.CommandName = "sido";
            lnkBtt.CommandArgument = i.ToString();

            tc.Controls.Add(lnkBtt);
         
            tr.Cells.Add(tc);
            PlaceHolder1.Controls.Add(tr);
        }
        

    }

    

    protected void Yeah_Click(object sender, CommandEventArgs e)
    {
        if (e.CommandName == "sido")
        {
        Label1.Text = e.CommandArgument.ToString();
        Label1.Text += "Es funktioniert !!!";
        
        }
    }

Kai, der Link vom Quickstart ist genial für mich. Ist mein Programm so in Ordnung, oder sollte ich lieber HtmlTable verwenden, was ist der Unterschied?