Problema - Lettura Input Box dinamiche

mercoledì 28 maggio 2008 - 10.31

kduhcm Profilo | Junior Member

Ciao ragazzi,
Dovrei creare delli input box html dinamicamente e poi leggerne il valore, ma non so come fare per leggere il valore successivamente.

Nel Page Load aggiungo il controllo alla pagina
if (!IsPostBack)
{
string htmlCarrello = "<input id='txtQuantita1' runat='server' type='text' value='111' />";
divInput.InnerHtml = htmlCarrello;
}
e successivamente, nell'evento click di un pulsante cerco di leggerlo

HtmlInputText t1 = (HtmlInputText)divInput.FindControl("txtQuantita1");

ma non funziona in quanto non mi trova il controllo (t1 risulta sempre null)

Il metodo FindControl funziona solo se l'input box e' stata precedentemente inserita nella pagina a design-time

Come posso fare? Suggerimenti?

Wamba Profilo | Expert

Non puoi creare controlli dinamici in quel modo. Viene renderizzato perchè è un controllo html, ma il server non si accorge della sua presenza.

Ti consiglio di dare un'occhiata ai post che sono già stati scritti in proposito:
http://www.dotnethell.it/Search.aspx?Search=controlli%20dinamici&type=4

In ogni caso sconsiglio sempre di creare i controlli dinamicamente: almeno di non avere molta voglia (e tempo) di imparare e sperimentare cose nuove (non sempre è possibile farlo in ambito lavorativo) o di non avere approfondite conoscienze tecniche sull'uso di asp.net.
Se non rientri in queste due categorie cerca un workaround ad esempio crea una normale textbox e setta la proprietà visible a false (non viene postato sul client, ma esiste lato server come controllo). Quando devi mostrare il controllo puoi tranquillamente fare TexBox1.Visible = true. Otterrai lo stesso effetto con molta meno fatica.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

kduhcm Profilo | Junior Member

Purtroppo devo fare un carrello della spesa e devo attenermi alla grafica gia fatta. Se faccio le textbox fisse mi incasino con la grafica poi...

Dimmi solo una cosa wamba... se renderizzo le righe come semplici input box, c'e un modo per leggerle tipo con un request. form o altro?

Wamba Profilo | Expert

Prova a guardare questo, anche se si tratta di un postback su la stessa pagina sono sicuro che riuscirai ad adattare il codice:
http://blogs.ugidotnet.org/WamBlog/archive/2008/05/24/passare-dati-fra-webform.aspx

Comunque a livello HTML/CSS non esiste differenza fra non creare un controllo server e settare la proprietà visible a false, dato che il tag <input type="text"> non viene creato (provare per credere).
PS - Nota Disambigua: Stò parlando della proprietà Visible di un tag server <asp:textbox> non della proprietà del css.
http://msdn.microsoft.com/en-us/library/system.web.ui.control.visible.aspx

-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

kduhcm Profilo | Junior Member

ho trovato la soluzione:

protected void Page_Load(object sender, EventArgs e)
{
TextBox TextBox1 = new TextBox();
TextBox1.ID = "TextBox1";

TextBox TextBox2 = new TextBox();
TextBox2.ID = "TextBox2";

HtmlGenericControl BrControl = new HtmlGenericControl();
BrControl.InnerHtml = "<br />";

ControlPlaceHolder.Controls.Add(TextBox1);
ControlPlaceHolder.Controls.Add(BrControl);
ControlPlaceHolder.Controls.Add(TextBox2);
}

protected void btn_PostBack_Click(object sender, EventArgs e)
{
lblTextBox.Text = string.Empty;

foreach (Control control in ControlPlaceHolder.Controls)
{
if (control is TextBox)
{
TextBox textbox = (TextBox)control;
lblTextBox.Text += textbox.ID + ": " + textbox.Text + "<br />";
}
}
}
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5