2016-04-14 11 views
1

Wie speicher ich Textbox-Eingabe auf Button klicken, so dass die Seite neu laden kann diese Werte verwenden, um einen Teil seines Inhalts neu zu erstellen? Ich habe versucht mit ViewState, aber es sagt immer nur null auf page_load bei der Verwendung von Haltepunkten.Speichern Zeichenfolge aus Textfeld auf Buttonclick, um diese Variable auf Seite neu zu laden

Button-Klick:

protected void LoadLifeLineBtn_Click(object sender, EventArgs e) 
{ 
    ViewState["lifelineID"] = Convert.ToInt32(TextBox1.Text); 
    ViewState["phaseid"] = Convert.ToInt32(TextBox2.Text); 
    this.Page_Load(); 
} 

Und herer mein page_load

int lifelineid; 
int phaseid; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    hideAndShow(); 
    if (!IsPostBack) 
    { 
     lifelineid = 22222; 
     phaseid = 1; 
     FillFaseTable(PhaseMainTable, phaseid, lifelineid); 
     PhasePanel.CssClass = "panel col-lg-2 col-md-2 col-xs-2 Phase1BackgroundColor"; 
    } 
    else if (IsPostBack) 
    { 
     if (ViewState["lifelineid"] != null) 
     { 
      lifelineid = (int)ViewState["lifelineid"]; 
     } 
     if (ViewState["phaseid"] != null) 
     { 
      phaseid = (int)ViewState["phaseid"]; 
     } 
     FillFaseTable(PhaseMainTable, phaseid, lifelineid); 
     PhasePanel.CssClass = "panel col-lg-2 col-md-2 col-xs-2 Phase1BackgroundColor"; 
    } 
} 
+0

zuvor hatte this.Page_load (null, null), da es etwas erfordert. Der Grund, warum ich diese.Page_load in LoadLifeLineBtn verwendet habe, ist, weil ich die Werte für viewstate setzen musste, aber zu diesem Zeitpunkt war page_load bereits beendet (da es vor dem Buttonclick gemacht wurde) – svennand

+1

Refactor den Code innerhalb der 'else if (IsPostBack) 'Block in eine Methode, dann rufen Sie diese Methode auf, anstatt' this.Page_Load() 'aufzurufen. Eigentlich brauchst du nur die letzten zwei Zeilen. – mshsayem

+0

JA! das hat funktioniert! Vielen Dank :) – svennand

Antwort

0

Unter der Annahme, dass Ihre Schaltfläche, um diese Veranstaltung verdrahtet ist

<asp:Button ID="LoadLifeLineBtn" runat="server" OnClick="LoadLifeLineBtn_Click"></asp:Button> 

Sie sollten diese in der Lage sein, um sich ändern ein bisschen, um einen reibungsloseren Fluss im Code zu bekommen.

protected void LoadLifeLineBtn_Click(object sender, EventArgs e) 
{ 
    hideAndShow(); 

    int lifelineID = Convert.ToInt32(TextBox1.Text); 
    int phaseid = Convert.ToInt32(TextBox2.Text); 

    FillFaseTable(PhaseMainTable, phaseid, lifelineid); 
    PhasePanel.CssClass = "panel col-lg-2 col-md-2 col-xs-2 Phase1BackgroundColor"; 
} 

Jetzt Ihr Page_Load Ereignis reorganisieren zu behandeln, wenn die Seite zunächst

protected void Page_Load(object sender, EventArgs e) 
{ 
    hideAndShow(); 
    if (!IsPostBack) 
    { 
     lifelineid = 22222; 
     phaseid = 1; 
     FillFaseTable(PhaseMainTable, phaseid, lifelineid); 
     PhasePanel.CssClass = "panel col-lg-2 col-md-2 col-xs-2 Phase1BackgroundColor"; 
    } 
} 

Der Grund lädt, ist, dass, wenn die LoadLifeLineBtn_Click Feuer, können Sie tun, was Sie an diesem Punkt müssen und nicht nennen das Page_Load Ereignis direkt.

0

Ich füge eine zweite Antwort hinzu, um zu erklären, was in Ihrem Code passiert, wenn Sie auf die Schaltfläche LoadLifeLineBtn klicken.

Wenn Sie LoadLifeLineBtn klicken, es löst das LoadLifeLineBtn_Click Ereignis, das eine Postback schaffen und die eingegebenen Werte in TextBox1 und TextBox2 wird bereits ein Teil des ViewState sein.

In Ihrem Code können Sie dies ändern, und es sollte so weitergehen, wie Sie beabsichtigen, ohne die ViewState manuell einzustellen.

protected void Page_Load(object sender, EventArgs e) 
{ 
    int lifelineid; 
    int phaseid; 

    hideAndShow(); 
    if (!IsPostBack) 
    { 
     lifelineid = 22222; 
     phaseid = 1; 
    } 
    else 
    { 
     lifelineID = Convert.ToInt32(TextBox1.Text); 
     phaseid = Convert.ToInt32(TextBox2.Text); 
    } 

    FillFaseTable(PhaseMainTable, phaseid, lifelineid); 
    PhasePanel.CssClass = "panel col-lg-2 col-md-2 col-xs-2 Phase1BackgroundColor"; 
}