226 messaggi dal 08 ottobre 2010
La mia pagina Test.aspx deve fare questa cosa:

se c'è spuntata l'opzione 1 va alla pagina 1.aspx
se c'è spuntata l'opzione 2 va alla pagina 2.aspx

Solo che a queste pagine devo anche inviare i dati del form della pagina Test.aspx sotto forma di post, e dunque non posso fare un redirect.

In giro su internet non sono riuscito a trovare nulla di utile, è possibile una cosa del genere?
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao, è possibile, dovresti predisporre due asp:Button e dare un attributo PostBackUrl a ciascuno. Questo ti permetterà di realizzare il cosiddetto cross-page postback, cioè l'invio dei dati del form ad un'altra pagina. Ecco i due bottoni, sono molto simili:

<asp:Button ID="bottone1" Text="Invia form" runat="server" PostBackUrl="~/pagina1.aspx" />
<asp:Button ID="bottone2" Text="Invia form" runat="server" PostBackUrl="~/pagina2.aspx" style="display:none" />

Nota che sul secondo ho messo un display:none perché voglio che solo uno di questi due bottoni sia visibile all'utente in un dato momento.

Ora bisogna sottoscrivere l'evento click delle opzioni (si tratta di un evento lato client), in modo che tu possa mostrare e nascondere i due bottoni in base alla scelta dell'utente. Ipotizzo che le tue opzioni siano una RadioButtonList.
<asp:RadioButtonList runat="server">
<asp:ListItem Selected="True" onclick="javascript:mostraPulsante(0)">Uno</asp:ListItem>
<asp:ListItem onclick="javascript:mostraPulsante(1)">Due</asp:ListItem>
</asp:RadioButtonList>
Al click sull'opzione, verrà invocata la funzione javascript mostraPulsante che devi inserire da qualche parte della pagina (nei tag <head> va bene).
<script type="text/javascript">
    function mostraPulsante(indice) {

        //ottengo un riferimento ai due bottoni
        var bottone1 = document.getElementById("<%= bottone1.ClientID %>");
        var bottone2 = document.getElementById("<%= bottone2.ClientID %>");

        //li metto in un array, per comodità, come vedrai nelle righe seguenti
        var bottoni = [bottone1, bottone2];

        //mostro quello indicato...
        bottoni[indice].style.display = "";
        //...e nascondo l'altro
        bottoni[1-indice].style.display = "none";
        
    }
</script>


ciao
Modificato da BrightSoul il 04 ottobre 2012 22.09 -

Enjoy learning and just keep making
226 messaggi dal 08 ottobre 2010
Interessante!
Non avevo pensato ad una soluzione javascript.

Ma per curiosità esistono anche soluzioni server-side?
E' possibile a runtime reindirizzare l'utente su un url passandogli un chiamata costruita ad hoc?
11.886 messaggi dal 09 febbraio 2002
Contributi
Sì, volendo farlo server-side puoi gestire l'evento SelectedIndexChanged del RadioButtonList e poi cambiare il PostbackUrl del bottone.
Però preferisco la soluzione client-side perché penso che l'utente non si aspetti un ricaricamento di pagina al click su un radio button. E' preferibile evitare di tornare al server solo per mostrare o nascondere un elemento dell'interfaccia.


E' possibile a runtime reindirizzare l'utente su un url passandogli un chiamata costruita ad hoc?

uhm, spiega il problema che devi risolvere.

ciao

Enjoy learning and just keep making
93 messaggi dal 25 maggio 2005
Ciao,
per lavorare lato server, puoi utilizzare il metodo HttpServerUtility.Transffer, che a differenza del Response.Redirect che lavora lato client, interrompe l'esecuzione della pagina corrente e trasferisce l'esecuzione alla nuova pagina indicata, mantenendo QueryString e Form.

L'unico aspetto negativo è che non viene rielaborata l'autenticazione per verificare che l'utente abbia accesso alla nuova pagina.

Riferimenti:
http://msdn.microsoft.com/en-us/library/y4k58xk7.aspx
226 messaggi dal 08 ottobre 2010
Ottima soluzione anche la selectIndexChanged, ovviamente andrebbe opportunamente gestita all'interno di un update panel, come suggerisce totti240282

Il caso d'uso è l'integrazione di Paypal, al termine di un flusso di acquisto si vuole lasciare al cliente la scelta della modalità di pagamento (si sceglie tramite radioButton) e poi al click si paga: nel caso che l'utente abbia scelto paypal al click bisogna andare sulla pagina di pagamento di paypal mandandogli il form con tutte le informazioni necessarie. E' uno scenario gestibile in modi diversi, ma io non so quanta libertà mi posso prendere sul layout definito, e visto che ero incappato nel problema di inviare una chiamata post server-side mi sembrava comunque interessante approfondirlo.

Non so se la soluzione proposta da gluck è idonea, da quanto ho letto pare che la pagina obiettivo dev'essere una pagina .aspx
93 messaggi dal 25 maggio 2005
Verce84 ha scritto:
Non so se la soluzione proposta da gluck è idonea, da quanto ho letto pare che la pagina obiettivo dev'essere una pagina .aspx


No, in questo caso non puoi usare il Server.Transfer, poiché devi giustamente rimanere all'interno della stessa app, e solo su file aspx o su un handler specifico.

Opterei per una soluzione javascript che modifica l'action della pagina. Come esempio ti scrivo un po' di pseudocodice da eseguire al click del pulsante.

var oldAction = actionCorrenteDellaForm;
var newAction = actionDerivanteDalRadiobutton;

formCorrente.action = newAction;
try
{
provo a fare il send del form
}
catch
//gestisco eventuale errore

formCorrente.action = oldAction
226 messaggi dal 08 ottobre 2010
Gluck ha scritto:

var oldAction = actionCorrenteDellaForm;
var newAction = actionDerivanteDalRadiobutton;

formCorrente.action = newAction;
try
{
provo a fare il send del form
}
catch
//gestisco eventuale errore

formCorrente.action = oldAction


Uhm con javascript è possibile fare un send del form?

Purtroppo non sono ferratissimo, ma per ipotesi: sarebbe possibile, dopo il click, fargli fare un autopostback e mandargli un javascript che, senza intervento dell'utente, spedisce il form ad una terza pagina?

Spero di essere stato chiaro..

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.