none
Variable innerhalb von Case füllen RRS feed

  • Frage

  • Hallo, alle zusammen,

    es geht bei mir wieder mal nicht weiter. Folgendes Problem:

    Aus einer Datenbank lese ich jeweils 6 Datensätze aus. Das Datenbankfeld "id" (int) möchte ich in einer Variable mit dem Namen "b_id" speichern. Um ihn auf einer anderen WebForm2 zur Verfügung stellen, schreibe ich den Inhalt mit einem Button-Event in eine Session-Variable. Anschließend rufe ich die WebForm2.aspx auf und in der Session-Variable steht nix.

    Besorge ich das ganze mittels eines HiddenField klappt es. Ich bin Ratlos. Wer kann mir helfen?

    Zum besseren Verständnis hier der entsprechende Codeausschnitt.

     public void view_pictures()
            {
                DataClasses1DataContext myDC = new DataClasses1DataContext();
    
                var query1 = from auswahl in myDC.Picture_Table.Skip(skip_value).Take(6)
                             select auswahl;
    
                int zaehler = 1;
                foreach (var ergebniss in query1)
                {
                    switch (zaehler)
                    {
                        case 1:
                            Image1.ImageUrl = "~/Pictures/" + ergebniss.bild;
                            b_id = ergebniss.id;
                            //HiddenField2.Value = ergebniss.id;
                            zaehler++;
                            break;
                        case 2:
    u.s.w
    
    protected void Button1_Click1(object sender, EventArgs e)
            {
                Session["bild_id"] = b_id;
                //Session["bild_id"] = HiddenField2.Value;
            }

    Besten Dank an euch für eine Antwort mit eventuell erklärendem Code.

    Grüße romego57

    Montag, 2. April 2012 18:15

Antworten

  • Hi,

    und wo wird b_id deklariert?

    Die Frage war eigentlich folgende:

    Wann wird die Methode view_pictures aufgerufen? Wenn Du den Button klickst oder eben, wenn Du nicht auf den Button klickst?

    ASP.NET ist was komplett anderes als lokale Anwendung wie bspw. WinForms, WPF, ... Es gibt hier keinen dauerhaften Zustand, der einen Request überdauert, es sei denn, man speichert seine Sachen bspw. in der Session, Application, Datenbank, ...

    D.h. wenn Du die Seite normal aufrufst, dort dann die Methode view_pictures aufrufst, deine Variable b_id setzt, anschließend dann bei dem Ergebnis, was im Browser ankommt, auf den Button klickst, wird ein komplett neuer Request gestartet. Sämtliche Variablen, ... werden komplett neu erzeugt. Du kannst dir das vereinfacht gesagt so vorstellen als wenn Du eine normale lokale Anwendung startest, etwas machst, die Anwendung komplett schließt und nochmal startest. Dann sind auch alle Eingaben/Auswahlen/... weg, wenn Du nicht selbst für eine dauerhafte Speicherung gesorgt hast.

    In deinem Fall würde ich bei dem Hidden Feld bleiben, das ist hier eigentlich die sauberste Lösung. Alternativ speichere den Wert aus b_id gleich in die Session und nicht erst beim Button Klick.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert romego57 Montag, 2. April 2012 20:12
    Montag, 2. April 2012 19:04
    Moderator
  • Hi,

    Die id wird geschrieben und im Anschluss wird mir die komplette Seite im Browser angezeigt. Erst jetzt betätige ich den Button, um die Session-Variable zu setzen. Ist die Variable b_id an dieser Stelle schon Vergangenheit?

    Ja. Das ist genau das von mir beschriebene Szenario. Du kannst es so machen, dass Du in view_pictures das Hidden Feld setzt und beim Button Klick den Wert dann aus dem Hidden Field ausliest und in die Session schreibst. Also im Prinzip so, wie es schon im auskommentierten Code steht :)


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert romego57 Montag, 2. April 2012 20:11
    Montag, 2. April 2012 19:28
    Moderator

Alle Antworten

  • Hi,

    wo wird denn b_id deklariert? Wird die Methode view_pictures im gleichen Request aufgerufen, in der auch der Button_Click Event ausgelöst wird? Oder ist das einen Request vorher?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Montag, 2. April 2012 18:42
    Moderator
  • Hallo Stefan,

    hier der Ort der Deklaration. Es wird alles innerhalb der Klasse Default aufgerufen. (Ich hoffe, das war die richtige Antwort.)

    namespace Diashow_Test_App
    {
        public partial class Default : System.Web.UI.Page
        {
            public int skip_value;
            public string b_name;
    
            protected void Page_Load(object sender, EventArgs e)
            {       
                if (!Page.IsPostBack)
                { ...........
    Bis später
    Montag, 2. April 2012 18:55
  • Hi,

    und wo wird b_id deklariert?

    Die Frage war eigentlich folgende:

    Wann wird die Methode view_pictures aufgerufen? Wenn Du den Button klickst oder eben, wenn Du nicht auf den Button klickst?

    ASP.NET ist was komplett anderes als lokale Anwendung wie bspw. WinForms, WPF, ... Es gibt hier keinen dauerhaften Zustand, der einen Request überdauert, es sei denn, man speichert seine Sachen bspw. in der Session, Application, Datenbank, ...

    D.h. wenn Du die Seite normal aufrufst, dort dann die Methode view_pictures aufrufst, deine Variable b_id setzt, anschließend dann bei dem Ergebnis, was im Browser ankommt, auf den Button klickst, wird ein komplett neuer Request gestartet. Sämtliche Variablen, ... werden komplett neu erzeugt. Du kannst dir das vereinfacht gesagt so vorstellen als wenn Du eine normale lokale Anwendung startest, etwas machst, die Anwendung komplett schließt und nochmal startest. Dann sind auch alle Eingaben/Auswahlen/... weg, wenn Du nicht selbst für eine dauerhafte Speicherung gesorgt hast.

    In deinem Fall würde ich bei dem Hidden Feld bleiben, das ist hier eigentlich die sauberste Lösung. Alternativ speichere den Wert aus b_id gleich in die Session und nicht erst beim Button Klick.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert romego57 Montag, 2. April 2012 20:12
    Montag, 2. April 2012 19:04
    Moderator
  • Sorry Stefan,

    da hat sich ein Fehler eingeschlichen. b_name sollte eigentlich b_id sein.

    Die Methode view_pictures wird im PageLoad aufgerufen, also wenn ich den Button nicht betätige.

    Das Button Event folgt im Anschluss, also nach dem Seitenaufbau. Ich glaube, jetzt verstehe ich die Sache. Ich habe soeben einen Breakpoint an die Stelle gesetzt, an der die Variable im Case-Abschnitt steht. Die id wird geschrieben und im Anschluss wird mir die komplette Seite im Browser angezeigt. Erst jetzt betätige ich den Button, um die Session-Variable zu setzen. Ist die Variable b_id an dieser Stelle schon Vergangenheit?

    Gruß, romego57

    Montag, 2. April 2012 19:25
  • Hi,

    Die id wird geschrieben und im Anschluss wird mir die komplette Seite im Browser angezeigt. Erst jetzt betätige ich den Button, um die Session-Variable zu setzen. Ist die Variable b_id an dieser Stelle schon Vergangenheit?

    Ja. Das ist genau das von mir beschriebene Szenario. Du kannst es so machen, dass Du in view_pictures das Hidden Feld setzt und beim Button Klick den Wert dann aus dem Hidden Field ausliest und in die Session schreibst. Also im Prinzip so, wie es schon im auskommentierten Code steht :)


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert romego57 Montag, 2. April 2012 20:11
    Montag, 2. April 2012 19:28
    Moderator
  • Hallo Stefan,

    deine Antwort war für mich sehr verständlich.

    Recht vielen Dank dafür.

    Gruß romego57

    Montag, 2. April 2012 20:00