Poblema con il passaggio di variabile con Href

lunedì 10 settembre 2012 - 17.10
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Visual Studio 2010

trinity Profilo | Guru

ragazzi devo aprire una pagina aspx in una fancybox iframe e per farlo ho bisogno a quanto pare dell'Href...in questa haref devo assolutamente passare un valore che si trova in una textbox della stessa pagina..sto provando in tutti i modi ma niente da fare io scrivo cosi:

pagina principale:


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

qui nella querystring mi viene riportato questo valore: "<% data_presenze %> anzichè il valore della textbox


dove sbaglio come posso risolvere? se non utilizzo href il popup jquery della fancybox non mi funziona
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

Gluck74 Profilo | Guru

Ciao,
purtroppo non conosco molto bene il PlugIn fancybox, comunque ti posso dire:

- Href non è un attributo per un bottone. Probabilmente non viene renderizzato nella maniera corretta sul browser.
- La variabile data_presenza la setti uguale alla textbox da codice, quindi necessiti per forza di un postback. Devi prendere il valore della textbox dal client con javascript.

La soluzione che dovresti fare è questa:
Fai un bottone HTML, fai un div nascosto con dentro un link. al click del bottone parte una funzione che prende il testo nel textbox e richiama il fancybox
dovrebbe essere questo:
<input type="text" id="txt_arrivo" /> <input type="button" id="btn" text="Visualizza presenze" /> <div style="display:none;"> <a id="link">Click</a> </div> <script> $(document).ready(function () { $("#link").fancybox(); $("#btn").click(function () { var data = $("#txt_arrivo").attr('value'); $("#link").attr('href', 'presenze_dettaglio.aspx?data=' + data); $("#link").trigger('click'); }); }); </script>
____________
http://glucolo.wordpress.com
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

trinity Profilo | Guru

Ciao ho fatto la prova con il codice che mi hai postato,
come faccio dalla pagina presenze_dettaglio a prendere il valore di data?

ho provato a scrivere così: Request.QueryString("data").ToString ma come valore mi esce "undefined"...come posso fare?

questo è il codice che eseguo quando apro la pagina presenze_dettaglio

If Not Page.IsPostBack Then Dim data As String = Request.QueryString("data") gw_Presenze.DataSource = CreateDataSource(Albergo.CodAlbergo, data) gw_Presenze.DataBind() End If

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

Gluck74 Profilo | Guru

>Ciao ho fatto la prova con il codice che mi hai postato,
>come faccio dalla pagina presenze_dettaglio a prendere il valore
>di data?
non so di cosa tu stia parlando!!!!!!

>
>ho provato a scrivere così: Request.QueryString("data").ToString
>ma come valore mi esce "undefined"...come posso fare?

dovresti darmi qualche informazione su quali pagine hai e come funzionano.



____________
http://glucolo.wordpress.com
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

trinity Profilo | Guru

Allora te mi hai passato questo codice:

<input type="text" id="txt_arrivo" /> <input type="button" id="btn" text="Visualizza presenze" /> <div style="display:none;"> <a id="link">Click</a> </div> <script> $(document).ready(function () { $("#link").fancybox(); $("#btn").click(function () { var data = $("#txt_arrivo").attr('value'); $("#link").attr('href', 'presenze_dettaglio.aspx?data=' + data); $("#link").trigger('click'); }); }); </script>

ed adattandolo alla mia situazione funziona....questo codice si trova in una pagina chiamata arrivi.aspx. Quando clicco sul button prendere il valore della txt_arrivo e lo passa attraverso l'href alla pagina presenze_dettaglio.aspx, la quale viene aperta in un iframe. La pagina presenze_dettaglio.aspx ha solamente una gridview che viene riempita di alcuni valore presi da una select sql. Tale select ha bisogna del parametro codicestruttura(che gli passo già io) e del valore data che viene passato attraverso l'href della pagina arrivi.aspx ossia attraverso la funzione che mi hai postato te. Solo che nel load della pagina presenze_dettaglio.aspx non riesco a ricavare il valore della variabile data che viene passata attraverso il link.

il codice che eseguo nella load della seconda pagina è il seguente:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
tutto qui
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

Gluck74 Profilo | Guru

ok. grazie per aver ripetuto la tua esigenza.
mi devi scusare ma non riesco a ricordare bene tutte le situazioni dei vari post, a volte mi perdo. ;-)

tornando al problema:
Il codice sembrerebbe tutto corretto. Dovresti mettere un breakPoint sul codice e verificare cosa ti arriva nel request.querystring (nella pagina dettaglio), e metterlo anche nel javascript per vedere se viene passato bene il parametro.

Se hai VS2010, basta che metti questa riga nel codice javascript:
debugger;

verifica e fammi sapere.
ciao
____________
http://glucolo.wordpress.com
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

trinity Profilo | Guru

ecco facendo il debbuger ho visto che nel codice javascript alla voce: var data = $("#txt_arrivo").attr('value'); esce già il valore non definito

voglio aggiungere che la txt_arrivo è creata con questo codice:

<asp:TextBox ID="txt_Arrivo" runat="server" AutoCompleteType="Disabled" AutoPostBack="True" EnableClientScript="False" Font-Size="8pt" style="text-align: center" ValidationGroup="Arrivi" Width="80px"></asp:TextBox> <ajaxToolkit:MaskedEditExtender ID="txt_Arrivo_MaskedEditExtender" runat="server" CultureAMPMPlaceholder="" CultureCurrencySymbolPlaceholder="" CultureDateFormat="" CultureDatePlaceholder="" CultureDecimalPlaceholder="" CultureName="it-IT" CultureThousandsPlaceholder="" CultureTimePlaceholder="" Enabled="True" ErrorTooltipEnabled="True" Mask="99/99/9999" MaskType="Date" TargetControlID="txt_Arrivo" UserDateFormat="DayMonthYear"> </ajaxToolkit:MaskedEditExtender> <ajaxToolkit:CalendarExtender ID="txt_Arrivo_CalendarExtender" runat="server" Enabled="True" Format="dd/MM/yyyy" PopupButtonID="imgb_Arrivo" TargetControlID="txt_Arrivo"> </ajaxToolkit:CalendarExtender>



Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

Gluck74 Profilo | Guru

e si, bisogna cambiare proprio questo punto.
Siccome il campo di testo lo generi con tag asp, il suo id sarà generato al volo, quindi non è "txt_arrivo".

Ora, se non ti serve proprio un tag asp, lo trasformi in tag html così non cambia il suo ID, e il resto è OK.
Se invece ti serve il textBox asp, allora hai 2 alternative:
1 - ASP.NET 4
puoi mettere la proprietà ClientIDMode="Static" così anche in questo caso l'id non cambia

2 - ASP.NET minore di 4
Devi mantenere la funzione javascript nella pagina asp.net (non puoi separarla e metterla in un file js) e modificare la riga in questo modo:
var data = $("#<%= txt_arrivo.ClientID %>").attr('value');
____________
http://glucolo.wordpress.com
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

trinity Profilo | Guru

Per motivi di vecchia programmazione in quanto questa webapplication alla sue origini non è stata scritta da me quindi ho mantenuto il framework iniziale ossia il 3.5, ho adottato il tuo secondo esempio, ma appena lancio la prima pagina aspx mi esce dal visual studio questo messaggio di errore:

Impossibile modificare l'insieme Controls perché il controllo contiene blocchi di codice (ossia <% ... %>).

come mai?

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

Gluck74 Profilo | Guru

Ciao,
questo errore si verifica solitamente quando si ha del codice ASP.NET <% %> inserito dentro del javascript (response di un ClientID ad esempio) ed il codice javascript sta nel HEAD della pagina (che sarebbe anche il posto giusto).

Dovresti spostare questo codice javascript all'interno del tag FORM della pagina.
____________
http://glucolo.wordpress.com
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

trinity Profilo | Guru

Allora passare la function nella form funziona solo se avvio la prima volta il progetto, perche se clicco sul calendario per prendere la data quando rieseguo la funzione non accade nulla....

ti posto il codice del td dove si trova dentro la txt_arrivio:

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


guarda ti allego le pagine aspx così hai un quadro meglio

ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com
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