Recuperare una textbox che sta in un listview

mercoledì 08 giugno 2011 - 16.00
Tag Elenco Tags  VB.NET  |  .NET 3.5

zseven Profilo | Senior Member

Ciao ragazzi,
ho la necessità di recuperare una textbox che sta in un listview attraverso uno script.
In questa maniera la riesco a recuperare se sta fuori, cioè sulla pagina:
Anno = document.getElementById('<%=TxtAnnoFine.ClientID %>').value;
ma se sta nel ListView non la riesco a beccare in nessuna maniera.

Sapete dirmi come posso fare?
Grazie mille

alx_81 Profilo | Guru

>Ciao ragazzi,
Ciao

>ho la necessità di recuperare una textbox che sta in un listview attraverso uno script.
>In questa maniera la riesco a recuperare se sta fuori, cioè sulla
>pagina:
>Anno = document.getElementById('<%=TxtAnnoFine.ClientID %>').value;
>ma se sta nel ListView non la riesco a beccare in nessuna maniera.
sei sicuro che l'espressione venga renderizzata correttamente?
Hai verificato che gli id combacino?
Guarda l'html e verifica l'id, controllando anche come viene generata l'espressione in alto.
Intanto cerchiamo di capire dalla sorgente della pagina.

>Sapete dirmi come posso fare?
>Grazie mille
di nulla!
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

zseven Profilo | Senior Member

Ciao Alx_81,
allora per poter vedere il risultato HTML ho dovuto eliminare il codice javascript altrimenti mi dava errore perchè diceva che non trovava proprio l'oggetto.
La situazione è questa:
ho una pagina .aspx all'interno della quale c'è uno usercontrol con ID= UsrTimer.
In questo UserControl c'è il mio Listview con il codice Javascript che ti avevo indicato prima.

Se guardo l'HTML della pagina vedo che la Textbox che devo ricercare viene caricata così:
<input name="UsrTimer$LstTimer$ctrl0$TxtAnnoFine" type="text" id="UsrTimer_LstTimer_ctrl0_TxtAnnoFine" />

Quindi
UsrTimer = UserControl
LstTimer = ListView
TxtAnnoFine = Textbox

spero tu riesca ad aiutarmi.
Grazie
Guido

alx_81 Profilo | Guru

>Se guardo l'HTML della pagina vedo che la Textbox che devo ricercare
>viene caricata così:
><input name="UsrTimer$LstTimer$ctrl0$TxtAnnoFine" type="text"
>id="UsrTimer_LstTimer_ctrl0_TxtAnnoFine" />
>Quindi
>UsrTimer = UserControl
>LstTimer = ListView
>TxtAnnoFine = Textbox
ok quello è l'id..
prova a fare una semplice funzione js che va a fare la getElementById di quell'id e vediamo se riesci a leggere il suo valore ad esempio, usa la tecnica che usavi prima per renderizzare il nome lato server con .ClientID
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

zseven Profilo | Senior Member

Ho provato così
Anno = document.getElementById('<%=UsrTimer_LstTimer_ctrl0_TxtAnnoFine.ClientID %>').value;

ma continua a darmi errore, dice che non trova UsrTimer

Nome 'UsrTimer' non dichiarato

alx_81 Profilo | Guru

>Ho provato così
>Anno = document.getElementById('<%=UsrTimer_LstTimer_ctrl0_TxtAnnoFine.ClientID %>').value;
>ma continua a darmi errore, dice che non trova UsrTimer
Secondo me quello è il nome che gli viene già dato lato client, quindi puoi provare già
Anno = document.getElementById("UsrTimer_LstTimer_ctrl0_TxtAnnoFine").value
Se vuoi andare a server, devi usare l'id che ha lato server quando viene creato.
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

zseven Profilo | Senior Member

ok inserendo così l'id funziona, ma l'id sarà sempre questo? SU qualsiasi computer e da qualsiasi parte ed in qualsiasi momento venga caricata la pagina?

alx_81 Profilo | Guru

>ok inserendo così l'id funziona, ma l'id sarà sempre questo?
>SU qualsiasi computer e da qualsiasi parte ed in qualsiasi momento
>venga caricata la pagina?
eheheh potenzialmente sì, ma solo di quel campo di testo. La cosa migliore a mio avviso è dare una classe a tutte quelle righe che devono essere clickate, e poi gestire l'evento di quegli item che possiedono quella classe. Con jQuery è molto semplice, anche gestire l'evento. Ad esempio:

$(".classeDefinitaPerLaRiga").click(function() { alert($(this).html); })

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

zseven Profilo | Senior Member

Purtroppo in jQuery non sono ferrato, e diciamo che adesso parte un nuovo problema.
Ti spiego per bene cosa sto cercando di realizzare:
in pratica devo realizzare un countdown utilizzando proprio jquery.countdown.

Nel ListView andrò a visualizzare un elenco N di prodotti che sono in offerta, ed ogni prodotto ha chiaramente la sua data di scadenza.
All'interno del ListView, oltre chiaramente a tutti i dati del prodotto avrà anche lo spazio dedicato al countdown che è così:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Nella pagina c'è anche il richiamo di una funzione jquery che è la seguente (modificata inserendo i valori degli id delle textbox come mi avevi consigliato):

<script type="text/javascript"> $(function () { var Anno; var Mese; var Giorno; Anno = document.getElementById('UsrTimer_LstTimer_ctrl0_TxtAnnoFine').value; Mese = document.getElementById('UsrTimer_LstTimer_ctrl0_TxtMeseFine').value; Giorno = document.getElementById('UsrTimer_LstTimer_ctrl0_TxtGiornoFine').value; var austDay = new Date(); austDay = new Date(Anno, Mese - 1, Giorno); $('#defaultCountdown').countdown({ until: austDay }); }); </script>

Il problema è questo:
Quando c'è un solo prodotto in offerta è tutto ok ed il contatore funzione(fermo restando che non ho capito come migliorare il richiamo dell'id del campo di testo :-) ).
Quando invece le offerte sono di più il secondo contatore non viene mostrato, e credo che il problema sia dovuto al fatto che la pagina renderizza il div defaulCountdown per due volte sempre con lo stesso, e quindi penso che si incasina sull'univocità del div quando deve restituire con la funzione il risultato del countdown.

Non so se mi sono spiegato bene.
Riesci ad aiutarmi in questa cosa che non riesco a risolvere.

Grazie mille
Guido

zseven Profilo | Senior Member

Ciao Alx,
scusa se mi rispondo da solo ma sto veramente impazzendo.

Non sono stato in grado in nessuna maniera di recuperare in maniera dinamica (e quindi non inserendo a mano l'id visto che non so quanti elementi verranno visualizzati) gli id dei campi di testo che mi servono.
Potresti indicarmi come posso fare?
L'esempio di Jquery mi è proprio oscuro, ho provato anche a vedere un pò di tutorial di jquery ma anche lì mi sono perso...

Grazie mille
Guido

alx_81 Profilo | Guru

>Ciao Alx,
>scusa se mi rispondo da solo ma sto veramente impazzendo.
Cambiamo strada.
Passami un html con un esempio simile al tuo. Vedo se posso farti una demo veloce. ok?
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

zseven Profilo | Senior Member

Ciao Alx,
allora quello che devo ottenere è esattamente quello che ho già fatto qui, ma per N risultati e non per uno solo:
http://guidozagarola2.com/offerte/last-minute-Ferragosto-al-mare-di-Scopello-25.aspx

In questo caso ho fatto un mezzo imbroglio, perchè per sapere il valore ho nascosto delle textbox con i valori che mi servivano prima della richiesta informazioni, e quindi al di fuori del ListView, e da lì poi le ho recuperate e impostato il countdown.
Questo sempre perchè non riesco a trovare l'id all'interno del listview, e questo problema mi impedisce di riuscire a fare questa operazione per N risultati.

Spero tu riesca ad aiutarmi.
Grazie mille
Guido

alx_81 Profilo | Guru

>Ciao Alx,
>allora quello che devo ottenere è esattamente quello che ho già
>fatto qui, ma per N risultati e non per uno solo:
>http://guidozagarola2.com/offerte/last-minute-Ferragosto-al-mare-di-Scopello-25.aspx
>Spero tu riesca ad aiutarmi.
ciao,
da quanto vedo tu ottieni questo (solo una parte):


Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

quel "UsrContatti_TxtNome" è quello che devi usare. Siccome quello è il clientId, quello che indicavi all'inizio mi sembra una soluzione corretta.
Dobbiamo capire come mai non ti funziona. Hai provato a fare un alert di quel ClientID?
Al di là di quello, se hai N textbox ripetuti, basta fare la get in like con jQuery, tipo "ricavami tutti i controlli il cui id inizia per".
Riesci per favore a farmi una paginetta semplice in cui metti il tuo list view solamente?
Così poi ragioniamo su quella, perchè non riesco ad aiutarti se mi passi il file con un'altra soluzione
Fammi per cortesia una paginetta semplice e poi dimmi da quella paginetta cosa vuoi ottenere dinamicamente.

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

zseven Profilo | Senior Member

Ciao Alx,
grazie per l'aiuto.
Non ho capito se ti basta solo la pagina online o anche il codice, credo la pagina online da sola cmq ti dò entrambe le cose:
La pagina online la puoi trovare a questo indirizzo:
http://nuovagenerazionekids.it/esempiotimer.aspx
Mentre i file te li allego.

Come puoi vedere in questo caso io visualizzo due prodotti con la relativa scadenza.
Vorrei che per ognuno dei prodotti elencati nel listview venisse visualizzato un contatore come quelli che di solito si vedono sulle offerte tipo groupalia o groupon.

Nell'esempio che trovi semplice il listview è come potrai vedere all'interno di uno usercontrol così da ripetere la stessa situazione in cui mi trovo io.

Grazie mille.

zseven Profilo | Senior Member

Ciao Alx,
per caso sei riuscito a vedere quella situazione per il timer?
Ormai sono giorni che ci provo e ci riprovo ma non riesco a venirne a capo.

Grazie mille
Guido

alx_81 Profilo | Guru

>Ciao Alx,
>per caso sei riuscito a vedere quella situazione per il timer?
>Ormai sono giorni che ci provo e ci riprovo ma non riesco a venirne
>a capo.
Ciao, devo chiederti scusa, ma proprio non ho ancora avuto il tempo di guardarci.


--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

zseven Profilo | Senior Member

ma figurati ci macherebbe altro! :-)

alx_81 Profilo | Guru

Ciao, ho ripreso in mano il post, provando ad andare sull'aspx ma la pagina non mi visualizza nulla.
L'esempio che mi hai allegato è vuoto, non so come aiutarti in questo caso.
Quello che serve a te, oltre a capire come mai non riesci a collegarti ad un campo creato al volo lato server dal client, è fare un listview con all'interno n countdown, uno per prodotto. Ti ho fatto una semplice demo, creando dati al volo e non usando database. E' in C# ma le sintassi sono molto simili. VB non lo installo più da molto tempo, scusami.
Spero possa esserti di aiuto, al massimo riprendiamo a seguire la questione da qui

ciao!
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

zseven Profilo | Senior Member

Ciao,
grazie mille per il tempo che mi stai dedicando! ;-)

Adesso mi sono scaricato il file chemi hai allegato, appena ho un attimo di tempo gli dò un'occhiata, anche per rinfrescarmi la memoria sul problema specifico.

Grazie mille
Guido
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5