2013-07-31 8 views
5

Ho aggiunto un CheckBox dinamicamente in asp.netaccedere ai valori di caselle di controllo creati dinamicamente in C#

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

posso accedere a questa CheckBox via C# a pageLoad per sé, poco dopo aver dichiarato sopra i codici. Ma quando provo ad accedere a questi valori dopo un clic del tasto sto ricevendo valori nulli.

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

(ph è un segnaposto) Nessuno può dirmi che cosa è sbagliato qui?

+0

@mcalex è solo un testo – Athul

+0

Se si sta creando l'albero di controllo in modo dinamico, è necessario farlo indipendentemente dal fatto che Page.IsPostback == true, è possibile elaborare dove si creano tali controlli (quale evento)? –

+0

hai aggiunto la casella di controllo ai controlli? –

risposta

1

Dopo aver fatto clic sul pulsante, verrà postata la pagina che aggiornerà lo stato. Se si desidera che i valori siano persistenti, sarà necessario eseguirne il backup all'interno di ViewState o simili.

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

al clic del pulsante Non riesco nemmeno a trovare questi controlli..che è quello che sto cercando di risolvere – Athul

+0

IIRC quando fai clic sul pulsante, tutti i controlli verranno eliminati poiché l'intera pagina viene pubblicata tramite un modulo. – Romoku

+0

Voglio davvero persistere quei controlli creati dinamicamente da solo quando premo il pulsante ... C'è del lavoro in giro che farà il trucco ... altrimenti sono totalmente perso – Athul

2

È necessario ricreare la casella di controllo ogni volta che i posti pagina indietro, in Page_Load evento, come è dinamicamente aggiunto alla pagina.

Quindi è possibile accedere alla casella di controllo in seguito in evento clic sul pulsante.

// Hi codice di esempio qui viene aggiornato ... Fonte

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

codice dietro

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

Lo sto già facendo .. Le prime tre linee sono caricamento della pagina interna. – Athul

0

Sono un po 'più tardi qui, ma io faccio solo:

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

Se una casella di controllo non è selezionata, non verrà visualizzata nella richiesta Modulo, quindi il blocco catch try. È veloce, semplice, riutilizzabile, robusto e, soprattutto, funziona!

Problemi correlati