2012-11-13 22 views
6

Ho lavorato su un sito in VB.NET e JQM e tutto è andato bene.evento di clic pulsante asp image con JQuery Mobile

Ora, sto cercando di includere un pulsante standard immagine utilizzando un tag come:

<asp:ImageButton ID="btnYear" runat="server" ImageUrl="~/images/buttons/year_btn.gif" /> 

e nel codice VB dietro file di v'è un evento click simile al seguente:

Private Sub btnYear_Click(sender As Object, e As System.Web.UI.ImageClickEventArgs) Handles btnYear.Click  
    Session("TimeFrame") = "YEAR"  
    *do other code* 
End Sub 

Quando faccio clic sul pulsante Immagine e rintraccio il codice - tutto il codice negli eventi della pagina nel codice dietro il fuoco del file (caricamento della pagina, prerender della pagina, ecc.) - ma l'evento click per il pulsante immagine non viene attivato.

Se sostituisco il pulsante Immagine con un asp standard: pulsante e faccio lo stesso - quindi l'evento click nel codice dietro si accende bene! Non è possibile utilizzare un ImageButton ASP all'interno di una pagina JQM e mantenere un evento click nel codice VB dietro il file?

EDIT Ok molto apprezzamento per andleer per la sua risposta - ma porta un nuovo scenario (problema) con la mia pagina alla luce, anche per quanto riguarda questi ImageButtons.

I controlli ImageButton sono contenuti in un controllo utente. La mia pagina è un singolo file ASPX con più <div data-role="page"> elemenst in esso, ciascuno con il proprio ID ("pagina1", "pagina2", "pagina3", ecc.) Che segue l'utilizzo standard della funzionalità multipagina di JQM. Ogni sezione "pagina" contiene un'istanza del controllo utente che contiene i pulsanti Immagine. Tutto funziona bene, con un solo problema: quando l'utente si sposta dall'impostazione predefinita "pagina1" a qualsiasi altra "pagina" e fa clic su uno dei pulsanti immagine, il codice si attiva, la pagina viene ricaricata e l'utente torna sul predefinito pagina - "pagina1".

Questo non va bene - avevo bisogno di un modo per consentire all'utente di sparare il pulsante e ricaricare la pagina e rimanere sull'elemento "pagina" che stavano visualizzando - JQM realizza queste pagine multiple usando i tag hash nell'URL - quindi ho trovato una riga di codice che ho aggiunto alla manifestazione della pagina di carico che diceva:

`Protected Sub Page_Load (ByVal sender As Object, ByVal e come System.EventArgs) tratta Me.Load

Me.Form.Attributes("onsubmit") = "this.action+=top.location.hash;" 

End Sub` 

I era originariamente utilizzando i pulsanti di scelta sul mio controllo utente - che JQM era "skinning" in modo che apparissero come pulsanti - e con questa riga nell'evento Page_Load, un utente c fare clic su un pulsante di opzione su qualsiasi elemento di "pagina" e il codice dietro i pulsanti di opzione si attiverebbe e la pagina si ricaricherà con l'utente sullo stesso elemento "pagina" da cui ha fatto clic, non sostituendo quindi il pulsante di opzione con i pulsanti di immagine. quando aggiungo la riga di codice all'evento Page_Load, i controlli ImageButton cessano completamente di funzionare - quando faccio clic sul codice nel loro clic anche nel codice sottostante non si attiva - né alcuno degli eventi a livello di pagina come Page_Load o Page_PreRender - facendo clic su di essi ora non fa assolutamente nulla ....

Qualche idea su questo?

risposta

0

Il problema è che un <asp:ImageButton /> viene visualizzato come <input type="image" /> nascosto da jQuery Mobile. Aggiungi un ruolo dei dati = "nessuno" a ImageButton che farà sì che jQuery Mobile esegua il rendering del controllo così com'è.

<asp:ImageButton id="MyButton" runat="server" data-role="none" /> 
+0

Apprezzo la tua risposta - ho un po 'di torsione diversa che posterò in una risposta - perché è un po' troppo lunga per un commento .... – Brian

1

una nuova risposta per affrontare la seconda parte della tua domanda:

Ho scoperto che le forme asp.net web semplicemente non funziona con jQuery Mobile scenari a più pagine. I moduli Web richiedono che tutti i controlli Web risiedano all'interno di un singolo elemento <form /> che deve estendersi su tutte le pagine jQuery Mobile ("virtuali"). Ciò è in diretto conflitto con la necessità di jQuery Mobile di disporre di elementi <form /> all'interno di ciascuna sottopagina per il rendering corretto e i pacchetti postali.

Considerare invece MVC.

+0

Purtroppo passare a MVC a questo punto è fuori dal domanda:/Questo problema post-back reindirizzato all'elemento "pagina" non corretto di un documento multipagina è uno degli ultimi problemi da risolvere prima di presentarlo - e deve essere presentato entro la settimana! Con tutto ciò che funziona in Web Form - e la mia stessa base di conoscenze è in forme web - Devo trovare un modo per far sì che questo accada qui - mi piacerebbe guardare in MVC lungo la strada però .... – Brian

+0

Ho trascorso una grande tempo necessario per ottenere un modello multi-pagina jqm che funziona con i moduli Web asp.net e alla fine ha rinunciato all'idea. Il problema degli elementi del modulo che ho descritto sopra non può essere superato. Lo stesso problema si verifica con qualsiasi caricamento DOM abilitato ajax. La tua unica speranza di ottenere questo funzionamento all'interno di asp.net Web lo consente di disattivare tutto il caricamento Ajax per andare con i modelli di pagina singola. Potrei sbagliarmi ma non sono stato in grado di superare questo problema/limitazione. – andleer

+0

Apprezzo tutto il tuo aiuto! Sono riuscito a ottenere qualcosa lavorando usando un campo nascosto che javascript caricava con il tag hash delle pagine sul clic del pulsante, e poi un javascript che si aggiungeva all'URL durante il caricamento - ma sembrava una soluzione "hoaky" che potrebbe portare a guai in seguito - quindi sto lavorando su pagine a pagina singola ora per vedere se riesco a farlo funzionare meglio. – Brian

Problemi correlati