Autor Beitrag
DennisXX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133



BeitragVerfasst: Mi 26.10.11 16:31 
Hallo zusammen !

Ich habe folgendes Codebeispiel:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
for(int i = 0; i < strListe.Length; i++)
{
   strListeDetail = strListe[i];
   Ausgabe.InnerHtml += "<b>" + strListeDetail + "</b>";
}


Allerdings wird mir nicht in meinem ASP Porjekt ausgegeben. Woran könnte das wohl liegen? Ausgabe ist ein HTML Div Element.

mfg
Dennis

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mi 26.10.11 16:59 
Soweit ich weiß, muss das <div>-Element das Attribut runat="server" gesetzt werden, damit es im Code bearbeitet werden kann. Hast du das gemacht? Und wo steht der Quelltext in deinem Projekt?
DennisXX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133



BeitragVerfasst: Do 27.10.11 09:09 
Hallo nochmal Yogu !

Also das Div Element hat den Wert runat="server". Der C Sharp Code steht in dem Bereich "<script runat="server"></script>".

Ich habe hier nochmal ein anderes Anliegen, bei dem Du mir vielleicht auch helfen könntest:

Ich habe hier den folgenden ASP Code für meine HTML Tabelle zusammengestellt:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
void generateHTMLTable(int intAnzahlSpalten, int intAnzahlZeilen)
{
   try
   {
       HtmlTable table = new HtmlTable();

       table.Border = 2;
       table.BorderColor = "black";

       for (int i = 0; i < intAnzahlSpalten; i++)
       {
            HtmlTableRow tableRow = new HtmlTableRow();
            table.Rows.Add(tableRow);

            for (int y = 0; i < intAnzahlZeilen; y++)
            {
                  HtmlTableCell tableCell = new HtmlTableCell();
                  tableCell.Text = "Test";
                  tableRow.Cells.Add(tableCell);
            }
       }

       Page.Controls.Add(table);

   }

   catch (Exception e)
   {
        Label1_Exception.Text = (string)e.Message;
        Label2_Exception_2.Text = (string)e.Source;
        Label3_Exception_3.Text = (string)e.StackTrace;
   }
}


Mir wird immer wieder eine OutOfMemory Exception ausgegegen. Da ich noch recht neu in ASP.Net bin, verstehe ich nciht so ganz, woran das liegt.

Grüße
Dennis

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
DennisXX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133



BeitragVerfasst: Do 27.10.11 13:56 
Also hier habe ich das Problem nochmal etwas näher beschrieben, vielleicht wird es dann deutlicher:

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
%@ Page Language="C#" %>

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

<script runat="server">

    public string[]strListe = new string[6]; 

    //Feststellung, welcher Button geklickt wurde   
    void CmdButton_Click(object sender, CommandEventArgs e)
    {
          switch (e.CommandName)
          {
                case "Button_1_Absenden":

                    //Absenden der Formulardaten
                    absendenFormulardaten();
                    hinzufügenListe();
                    break;


                //Alle andere Case Anweisungen sind unwichtig              


                case "Button6_Liste_ausgeben":

                    //Eingegebene Formulardaten wieder auslesen
                    loeschenAusgabefenster();
                    ausgebenListe();
                    break;

          }
                   
    }

    void absendenFormulardaten()
    {
            Ausgabe.InnerHtml = "";

            Ausgabe.InnerHtml += "Das Formular wurde verschickt! <br/> <br/>";
            Ausgabe.InnerHtml += "Die eingegebenen Daten lauteten wiefolgt:" + "<br/>";
            Ausgabe.InnerHtml += "Vorname: " + Server.HtmlEncode(Vorname.Value) + "<br/>";
            Ausgabe.InnerHtml += "Nachname: " + Server.HtmlEncode(Nachname.Value) + "<br/>";
            Ausgabe.InnerHtml += "Strasse: " + Server.HtmlEncode(Strasse.Value) + "<br/>";
            Ausgabe.InnerHtml += "Hausnummer: " + Server.HtmlEncode(Hausnummer.Value) + "<br/>";
            Ausgabe.InnerHtml += "PLZ: " + Server.HtmlEncode(Plz.Value) + "<br/>";
            Ausgabe.InnerHtml += "Ort: " + Server.HtmlEncode(Ort.Value) + "<br/>";

            Label1_Hinweisfeld.Text = "Die Daten wurden erfolgreich übertragen !";
                
            Button6_Liste_ausgeben.Visible = true;
    }


    void hinzufügenListe()
    {            
            strListe[0] = Vorname.Value.ToString();
            strListe[1] = Nachname.Value.ToString(); ;
            strListe[2] = Strasse.Value.ToString();
            strListe[3] = Hausnummer.Value.ToString();
            strListe[4] = Plz.Value.ToString();
            strListe[5] = Ort.Value.ToString();

            //Label1_Testausgabe.Text = "Test in Methode hinzufügenListe(): " + strListe[5];
    }

    void ausgebenListe()
    {          
        
            string strListeDetail;
                    
            for (int i = 0; i < strListe.Length; i++)
            {
                strListeDetail = strListe[i];
                Ausgabe.InnerHtml = "<b>" + Server.HtmlEncode(strListeDetail) + "</b>";                                  
            }

            Label1_Hinweisfeld.Text = "Die Liste wurde ausgegeben !";
    }


Ich habe nun das Problem, dass durch die Methode "ausgebenListe()" nichts ausgegeben wird. Ich habe schon durch diverse Test fstgestellt, dass ich in dieser Methode nicht auf das am Anfang deklarierte und initialisierte Array "strListe" zugreifen kann.
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Do 27.10.11 19:29 
user profile iconDennisXX hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden C#-Quelltext
 
72:
73:
74:
75:
76:
/* ... */
            for (int i = 0; i < strListe.Length; i++)
            {
                strListeDetail = strListe[i];
                Ausgabe.InnerHtml = "<b>" + Server.HtmlEncode(strListeDetail) + "</b>";                                  
            }

Du weist dem Inhalt des Elements immer wieder einen neuen Wert zu und überschreibst dabei den alten. Am Ende wird nur der letzte Eintrag der Liste angezeigt werden. Wenn der leer ist, wird nichts angezeigt.

user profile iconDennisXX hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe nun das Problem, dass durch die Methode "ausgebenListe()" nichts ausgegeben wird.

Siehst du denn wenigstens <b></b> an der Stelle im Quelltext? Oder wird wirklich überhaupt nichts ausgegeben. Wenn du Ausgabe.InnerHtml in der Methode AusgabeListe direkt einen bestimmten String zuweist, ohne das ganze andere, siehst du den dann?

user profile iconDennisXX hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe schon durch diverse Test fstgestellt, dass ich in dieser Methode nicht auf das am Anfang deklarierte und initialisierte Array "strListe" zugreifen kann.

Wie meinst du das? Ist strListe null, leer oder was? Eigentlich müsste er schon genau auf dieses Array zugreifen, es gibt ja kein anderes gleichnamiges. Und da es zu Beginn mit 6 Einträgen initialisiert wird und nirgends sonst zugewiesen wird, müssten eigentlich auch noch alle 6 Einträge vorhanden sein, und zumindest die <b></b>-Struktur erkennbar sein.

Edit: Da dein anderes Problem wirklich nichts mit dem hier zu tun hat, erstelle bitte ein neues Topic dafür :idea:
DennisXX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133



BeitragVerfasst: Fr 28.10.11 08:38 
Hallo Yogu !

Da ich das jetzt im Visual Studio mit dem Debugging endlich zum laufen gebracht habe, ist mir jetzt auch ersichtlich geworden, warum nichts ausgegeben wird. Also an fehlerhaftem Code liegt es definitiv nicht. Das String-Array wird befüllt und die Werte stehen da drin. Wird aber die Methode ausgebenListe() aufgerufen, so ist das Array wieder leer, es steht also nichts drin.

Ich vermute mal, dass ich etwas mit Seession und Cookies machen muss, um die Daten länger in einem Array zu halten oder? Ich habe im Debuggen festgestellt, dass immer wieder implizit die Methode PageLoad() aufgerufen wird. In diesem Methode steht zwar fast nichts drin, aber kann es sein, dass dadurch die Daten verloren gehen? Wenn ich mich recht erinnere, dann ist das HTTP Protokoll, welche ich ja hier nutze, zustandslos.

Grüße
Dennis
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Fr 28.10.11 12:51 
user profile iconDennisXX hat folgendes geschrieben Zum zitierten Posting springen:
Wird aber die Methode ausgebenListe() aufgerufen, so ist das Array wieder leer, es steht also nichts drin.

Ich glaube, du meinst: Es enthält sechs leere String-Elemente. Das ist was ganz anderes als ein leeres Array; es macht nämlich Sinn.

user profile iconDennisXX hat folgendes geschrieben Zum zitierten Posting springen:
Ich vermute mal, dass ich etwas mit Seession und Cookies machen muss, um die Daten länger in einem Array zu halten oder?

Korrekt. Irgendwie muss der Server ja wissen, welcher Benutzer welche Daten eingegeben hat. Und das macht man normalerweise mit Cookies.

user profile iconDennisXX hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich mich recht erinnere, dann ist das HTTP Protokoll, welche ich ja hier nutze, zustandslos.

So könnte man es bezeichnen. Das HTTP-Protokoll sieht vor, dass für jede Seitenanfrage eine neue Verbindung aufgebaut wird, und diese danach wieder geschlossen wird (mit Ausnahmen aus Performancegründen). Also ist es erst einmal nicht möglich, einen Zustand über zwei Anfragen hinweg zu behalten. Daher die Cookies.

Du kannst dich nun entweder in die Session-Verwaltung dieser reinen ASP.NET-Anwendung reinarbeiten, aber mach dich gefasst: Das ist (meiner Meinung nach) alles sehr unschön und hat mit moderner Softwarearchitektur nicht viel zu tun. Außerdem ist es alt.

Die andere Möglichkeit, die ich dir sowieso ans Herz legen wollte: Wenn du Zeit hast, arbeite dich mal in Microsofts MVC 3 mit den Razor-Templates ein. Auf der verlinkten Seite gibt es links eine Spalte mit tollen Einführungsvideos, mithilfe deren ich mich sehr schnell einarbeiten konnte.

Die Vorteile von MVC, insbesondere 3, im Gegensatz zum Schreiben von aspx-Dateien: Dein Projekt bekommt Struktur. MVC steht für Model, View, Controller und beschreibt damit die drei Einheiten, in die du deine Webanwendung aufteilst: In einen Datenspeicher, der diese außerdem selbst validiert (also genau das, was du noch brauchst), die HTML-Vorlagen, die du mit Razor richtig schön schreiben kannst, und einen Steuerungsteil, also eine C#-Klasse, die Aktionen ausführen kann. Durch diese Kontrolle behältst du bei größeren Projekten den Überblick, aber auch kleine Webanwendungen kannst du so ziemlich gut planen.

Zu Razor noch was: Statt der Methode tabelleAnzeigen, die du dir zusammengebastelt hast, schreibst du einfach etwas in der Art:

ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
<table>
  @foreach (var entry in Model.Entries) {
    <tr>
      @foreach (var field in entry.fields) {
        <td>@field.Name:</td>
        <td>@field.Value</td>
      }
    </tr>
  }
</table>

Übersichtlich, oder? Und Sonderzeichen werden automatisch zu < usw. umgewandelt.

Soweit ich das sehe, steht dein Projekt noch recht am Anfang, also wäre für ein Umstieg wohl ein wenig Einarbeitungszeit nötig. Und die lohnt sich.

Grüße,
Yogu