Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di newbie
    Registrato dal
    Dec 2005
    Messaggi
    299

    [2.0-C#]Finestre di conferma sul client durante esecuzione codice server

    Problemino da un milione di dollari...

    Detto in parole povere: in Windows Forms esiste la MessageBox, che
    [list=1][*]si può eseguire in qualsiasi punto del resto del codice, non solo al clic su un pulsante o simili[*]restituisce un valore (sì, no, OK, annulla...)[*]è una vera e propria function: il controllo ritorna al codice solo *dopo* aver chiuso la finestra[/list=1]
    Esiste un modo per creare qualcosa di simile in Asp.net, richiamabile direttamente da codice?
    Finora sono riuscito solo a mostrare una alert Javascript, usando RegisterClientScriptBlock(.... "<script language=javascript>alert('messaggio');</script>", ma proprio non esiste un modo per creare, che ne so, una confirm che restituisca il valore scelto dall'utente?

    In altre parole, per generalizzare: esiste un modo di fare una cosa del genere:
    codice:
    nella pagina html:
    
    <script language=javascript>
    function funzione(parametri...)
    {
        return ...risultato...;
    }
    </script>
    
    nel suo codebehind, in C#:
    
    k = javascript.funzione(param1);   //<- come lo dovrei scrivere?
    ...utilizza k...
    o, equivalentemente, di mostrare una pagina aspx come una finestra di dialogo ed estrarne il valore restituito?
    Svegliati, Neo. Matrix ti possiede...

  2. #2
    Utente di HTML.it L'avatar di newbie
    Registrato dal
    Dec 2005
    Messaggi
    299
    Nessuno?
    Svegliati, Neo. Matrix ti possiede...

  3. #3
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    codice:
        Public Shared Sub Alert(ByRef Pagina As System.Web.UI.Page, ByVal Messaggio As String)
            Dim js As String = "<script language=javascript> alert(""" & Messaggio & """) </script>"
            If (Not Pagina.IsStartupScriptRegistered("clientscript_messagebox")) Then
                Pagina.RegisterStartupScript("clientscript_messagebox", js)
            End If
        End Sub

    inserisci questo metodo in una tua classe ...
    e richiamalo dalla pagina con :

    codice:
    NomeClasse.Alert(Me,"messaggio di prova")

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    scusami avevo letto male. Non e' esattamente quello che tu vuoi, ma per azionare una confirm alla pressione di un tasto, per una cancellazione, ad esempio, metti nel Page_load :

    codice:
            bottone.Attributes.Add("onclick", "return confirm('Cancellare ?');")
    dipendentemente dalla risposta dell'utente, sara' eseguita o meno la sub bottone_click.

  5. #5
    Utente di HTML.it L'avatar di newbie
    Registrato dal
    Dec 2005
    Messaggi
    299
    Effettivamente l'effetto dovrebbe essere quello (in questo modo il client comunicherebbe indirettamente al server il risultato della conferma)... il problema era proprio come rendere tutto ciò indipendente dal fatto che l'utente debba per forza premere un bottone. Insomma, lo scopo finale sarebbe creare una classe Finestre contenente due metodi, richiamabili da codice:
    void Messaggio(string testo), che mostra una finestra di messaggio;
    bool Conferma(string testo), che restituisce un valore booleano in base a ciò che il client sceglie in una finestra di conferma.
    In altre parole, vorrei utilizzare o simulare le comode (e snelle dal punto di vista dell'interazione utente) funzioni "alert" e "confirm", e magari "prompt", di JavaScript, ma dall'interno di C#.
    Svegliati, Neo. Matrix ti possiede...

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Avevo qualcosa in merito.
    Era implementata con un handler http se non sbaglio. Se la ritrovo la posto, oppure posto il link

  7. #7
    Utente di HTML.it L'avatar di newbie
    Registrato dal
    Dec 2005
    Messaggi
    299
    Originariamente inviato da djciko
    Avevo qualcosa in merito.
    Era implementata con un handler http se non sbaglio. Se la ritrovo la posto, oppure posto il link
    Svegliati, Neo. Matrix ti possiede...

  8. #8
    Utente di HTML.it L'avatar di newbie
    Registrato dal
    Dec 2005
    Messaggi
    299
    Forse ho trovato un modo... anche se non so fino a che punto possa funzionare...

    Ho creato una classe Utility, che dovrebbe contenere due metodi statici: void Alert(Page pagina, string messaggio) e bool Confirm(Page pagina, string messaggio).

    Per quanto riguarda Alert, mi è bastato usare pagine.ClientScript.RegisterClientScriptBlock, che esegue uno script che mostra l'alert. E funziona alla grande.

    Il problemone è la Confirm... principalmente perchè deve restituire un valore alla pagina.
    Avevo pensato di:
    [list=1][*]creare al volo nella pagina un campo nascosto usando RegisterHiddenField, avvalorarlo con una RegisterClientScriptBlock che mostri una confirm che riempie il campo (cosa che funziona: se faccio un'alert dopo la confirm il valore del campo allare regolarmente), e poi recuperare nel server il valore del campo nascosto... cosa che non riesco a fare in nessun modo [*]Fare la stessa cosa, ma usando la sessione invece che il campo nascosto (creo una variabile di sessione via JavaScript, la avvaloro con la confirm, e dopo leggo il valore della variabile nel server). Il problema è che non riesco a crearla... [*]Usare un cookie invece che le variabili di sessione. Sarebbe la mia ultima speranza, ma ho i miei dubbi che funzioni [/list=1]
    Svegliati, Neo. Matrix ti possiede...

  9. #9
    Utente di HTML.it L'avatar di Legnetto
    Registrato dal
    May 2002
    Messaggi
    1,419
    Originariamente inviato da newbie
    ....
    e poi recuperare nel server il valore del campo nascosto... cosa che non riesco a fare in nessun modo
    Utilizzando il vecchio ma sempre attuale Request.Form("nome_hidden") dovrebbe funzionare.

    Originariamente inviato da newbie
    Fare la stessa cosa, ma usando la sessione invece che il campo nascosto (creo una variabile di sessione via JavaScript, la avvaloro con la confirm, e dopo leggo il valore della variabile nel server). Il problema è che non riesco a crearla...
    Creare una sessione sul server con un linguaggio client (che io conosco poco) mi sembra un po' dura...

    Ciao
    Legnetto

  10. #10
    Utente di HTML.it L'avatar di newbie
    Registrato dal
    Dec 2005
    Messaggi
    299
    Originariamente inviato da Legnetto
    Utilizzando il vecchio ma sempre attuale Request.Form("nome_hidden") dovrebbe funzionare.
    La funzione che ho scritto (che deve essere indipendente dalla pagina in cui è scritta... dato che la vorrei come funzione di libreria) è
    codice:
        public static bool Conferma(Page pagina, string testo)
        {
            /* Crea nei dati di sessione una variabile "Risultato" contenente il risultato
             * la avvalora tramite uno script che usa la confirm
             * poi legge il dato di sessione
             */
           pagina.ClientScript.RegisterHiddenField("campoRisultato", "False");
           pagina.ClientScript.RegisterClientScriptBlock(pagina.ClientScript.GetType(), Guid.NewGuid().ToString(),
                                      "<script language=\"javascript\">" +
                                      "document.getElementById(\"campoRisultato\").value = confirm(\"" + testo + "\");" +
                                      "alert(document.getElementById(\"campoRisultato\").value);" + 
                                      "</script>");
            System.Diagnostics.Debug.WriteLine("<" + pagina.Request.Form["campoRisultato"] + ">");
            
            return false;  //per ora... in realtà deve convertire la stringa in booleano
        }
    La stranezza è che sembra che le prime due righe funzionino (infatti mi appare la confirm, e dopo anche l'alert con il velore corretto, segno che il campo nascosto viene creato e che è accessibile dallo script), ma nonostante questo, nella console di debug mi appare "<>", il che indica che il campo nascosto... è visto dal server come vuoto.

    Dove sto sbagliando?
    Creare una sessione sul server con un linguaggio client (che io conosco poco) mi sembra un po' dura...
    Infatti non c'è verso. Ma dato che i cookie sono salvati sul client e sono leggibili da server... proverò a fare il tentativo.
    Svegliati, Neo. Matrix ti possiede...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.