40 messaggi dal 19 settembre 2006
Ciao a tutti !

Ho un problemino banale ma che mi blocca...

Ho creato un sito Asp dove utilizzo anche le librerie Ajax.net della microsoft.

Sto Utilizzando il TabContainer di questa libreria, dove all'interno si trovano diverse TextBox.

Con Javascript devo catturare queste TextBox e fare dei calcoli, ma non riesco a catturarli.

Il comando javascript che uso è

Casella1=document.getElementById("TextBoxNumero");

Però mi dice che "Casella1 è nullo o non è un oggetto"

Ma se sposto la "TextBoxNumero" da dentro il TabContainer e lo metto nella pagina viene riconosciuta correttamente.


Come deve essere il comando javascript per fargli trovare le TextBox contenute nella TabContainer ?
non ho mai usato il TabContainer , ma la regola per ogni controllo web lao server è che l'ID sia generato dinamicamente in base all'albero dei controlli che lo contengono.

se le metti nella pagina è normale che rimanda invariato.

se lo metti in un conenitore l'id viene autogenerato in genere anteponendo il nome del controllo contenitore.

se dai un occhiata all'html puoi vederlo con i tuoi occhi :D


quindi devi usare il metodo FindControl per recuperare il controllo dal contenitore e generare dinamicamente il tuo javascript utilizzando la proprietà ClientID per recuperare il nome usato sul client

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
40 messaggi dal 19 settembre 2006
Grazie per l'aiuto Marco.

Puoi farmi un esempio di due righe per capire bene, questa tecnica non l'ho mai usata.
426 messaggi dal 17 aprile 2006
prova ad inserire
document.getElementById('<% =TextBoxNumero.ClientID %>');

marco ti sta suggerendo di vedere dall'html della pagina quale sia l'id assunto dalla tua text box cioè fai tasto destro col mouse e clicca su visualizza sorgente (o html) poi cerchi li il nome del textbox

i tab control di ajax a mio avviso rappresentano il controllo peggio riuscito della libreria Ajax ControlToolKit e li eviterei come la peste...

Ciao Alessandro
40 messaggi dal 19 settembre 2006
Ho appena controllato Il codice Html che viene generato.

Ho copiato gli l'ID delle TextBox che vengono generati nel codice HTML e li ho incollati nel comando:

Casella1=document.getElementById("TabContainer_TabPanel_TextBoxNumero");

ORA FUNZIONA CORRETTAMENTE.

GRAZIE PER L'AIUTO !
magari l'esempio non incastra con il tuo controllo, ma vediamo se riesco a esprimere il concetto, mettiamo di avere questa TextBox:
<asp:TextBox runat="server" ID="LatitudeTextBox" />


questo controllo si trova all'interno di un Content mappato al rispettivo ContentPlaceHolder della master.

se volessi utilizzare questa TetxBox per qualsiai javascript dovrei recuperare per prima cosa, il riferimento al controllo e poi l'id del controllo .

TextBox _latitudeTextBox = Controls[0].FindControl("MainContentPlaceHolder").FindControl("LatitudeTextBox") as TextBox;


e dopo crerare lo script:

      _sb = new StringBuilder();

            _sb.Append("function FindUI(){");
            _sb.AppendFormat("latitudeTextBox = document.getElementById('{0}');", _latitudeTextBox.ClientID);
            _sb.AppendFormat("longitudeTextBox = document.getElementById('{0}');", _longitudeTextBox.ClientID);
            _sb.Append("}");

            if (!ClientScript.IsClientScriptBlockRegistered("FindUI"))
            {
                ClientScript.RegisterClientScriptBlock(this.GetType(), "FindUI", _sb.ToString(), true);
            }


ho estrapolato questo codice al volo, può essere che manchi qualcosina

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
alex84b ha scritto:
Ho appena controllato Il codice Html che viene generato.

Ho copiato gli l'ID delle TextBox che vengono generati nel codice HTML e li ho incollati nel comando:

Casella1=document.getElementById("TabContainer_TabPanel_TextBoxNumero");

ORA FUNZIONA CORRETTAMENTE.

GRAZIE PER L'AIUTO !



è sicuramente un metodo rapido e funzionale, ricordati solo che se cambia la gerarchia dei controlli cambierà di conseguenza anche l'id

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
426 messaggi dal 17 aprile 2006
sicuramente così ti funziona... ma se percaso alla pagina aggiungi una masterpage (vabbè sarebbe più corretto dire il contrario... e dunque tutta la tua pagina finisse in un controllo server quale il ContentPlaceHolder) oppure se inserisci il tabContainer in altro oggetto lato server (es asp:Panel) ti trovi a dover cambiare nuovamente il javascript...

in generale ti converrebbe inserire nel javascript la funzione che rileva il nome che assumerà il controllo server nella pagina e cioè
controllo.ClientID

in pratica con
Casella1=document.getElementById('<% =TextBoxNumero.ClientID %>');
ti metti al riparo da questi scherzetti...

Ciao Alessandro

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.