2013-07-31 21 views
5

Ich habe eine CheckBox dynamisch in asp.net hinzugefügtZugriff dynamisch erstellt Checkbox Werte in C#

CheckBox cb = new CheckBox(); 
cb.Text = "text"; 
cb.ID = "1"; 

ich diesen CheckBox in pageLoad über C# zugreifen kann sich nur nach oben Codes zu erklären. Aber wenn ich versuche, auf diese Werte nach einem Klick zuzugreifen, bekomme ich Nullwerte.

CheckBox cb1 = (CheckBox)ph.FindControl("1"); 
Response.Write(cb1.Text); 
    ph.Controls.Add(cb); 

(ph ist ein Platzhalter) jemand mir was falsch hier sagen?

+0

@mcalex ist nur ein Text – Athul

+0

Wenn Sie den Steuerelementbaum dynamisch erstellen, müssen Sie dies tun, unabhängig davon, ob Page.IsPostback == true, können Sie näher erläutern, wo Sie diese Steuerelemente erstellen (welches Ereignis)? –

+0

haben Sie das Kontrollkästchen zu den Kontrollen hinzugefügt? –

Antwort

1

Nachdem Sie auf die Schaltfläche geklickt haben, wird die Seite zurückgeschrieben, die den Status aktualisiert. Wenn Sie möchten, dass die Werte dauerhaft sind, müssen Sie sie innerhalb der ViewState oder ähnlichem gesichert haben.

private bool CheckBox1Checked 
{ 
    get { return (ViewState["CheckBox1Checked"] as bool) ?? false; } 
    set { ViewState["CheckBox1Checked"] = value; } 
} 

void Page_load(object sender, EventArgs e) 
{ 

    CheckBox cb = new CheckBox(); 
    cb.Text = "text"; 
    cb.ID = "1"; 
    cb.Checked = CheckBox1Checked; 
    cb.OnCheckedChanged += CheckBox1OnChecked; 
    // Add cb to control etc.. 
} 

void CheckBox1OnChecked(object sender, EventArgs e) 
{ 
    var cb = (CheckBox)sender; 
    CheckBox1Checked = cb.Checked; 
} 
+0

beim Klicken auf die Schaltfläche Ich kann diese Steuerelemente nicht einmal finden..das ist, was ich versuche, zu sortieren – Athul

+0

IIRC Wenn Sie auf die Schaltfläche klicken, werden alle Steuerelemente gelöscht, da die gesamte Seite über ein Formular bereitgestellt wird. – Romoku

+0

Ich möchte wirklich die dynamisch erstellten Steuerelemente dort persistent halten, wenn ich den Knopf drücke..Ist da irgendwelche Arbeit rum, die den Trick tun ... sonst bin ich total verloren – Athul

2

Sie müssen das Kontrollkästchen jedes Mal die Seite Beiträge zurück, in Page_Load Ereignis neu erstellen, da es dynamisch zu Seite hinzugefügt wird.

Dann können Sie das Kontrollkästchen später in Button-Klick-Ereignis zugreifen.

// hier Hallo aktualisiert Beispielcode ... Quelle

<body> 
    <form id="frmDynamicControl" runat="server"> 
    <div> 
     <asp:Button ID="btnGetCheckBoxValue" Text="Get Checkbox Value" runat="server" 
      onclick="btnGetCheckBoxValue_Click" /> 
    </div> 
    </form> 
</body> 

Code hinter

protected void Page_Load(object sender, EventArgs e) 
{ 
    CheckBox cb = new CheckBox(); 
    cb.Text = "text"; 
    cb.ID = "1"; 
    frmDynamicControl.Controls.Add(cb); 
} 

protected void btnGetCheckBoxValue_Click(object sender, EventArgs e) 
{ 
    CheckBox cb1 = (CheckBox)Page.FindControl("1"); 
    // Use checkbox here... 
    Response.Write(cb1.Text + ": " + cb1.Checked.ToString()); 
} 
+0

Ich mache es bereits..Die ersten drei Zeilen sind innerhalb der Seitenladung. – Athul

0

ich später hier ein bisschen bin, aber ich gerade:

try{ 
if(Request.Form[checkboxId].ToString()=="on") 
{ 
//do whatever 
} 
}catch{} 

Wenn ein Kontrollkästchen nicht aktiviert ist, wird es nicht in der Formularanforderung angezeigt, daher der try catch-Block. Es ist schnell, einfach, wiederverwendbar, robust und am wichtigsten, es funktioniert einfach!

Verwandte Themen