Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Un aiuto...

  1. #1
    Utente di HTML.it L'avatar di Nazareno
    Registrato dal
    Mar 2001
    residenza
    Udine
    Messaggi
    176

    Un aiuto...

    Visto che è un pò complicato, ti posto qualche riga di codice:
    Variabile globale che indica se siamo in IE oppure no:

    codice:
    private bool _ie = false;
    Metodo OnInit della pagina ASP.NET:

    codice:
    		override protected void OnInit(EventArgs e)
    		{
    			//
    			// CODEGEN: This call is required by the Web Form Designer.
    			//
    			InitializeComponent();
    			base.OnInit(e);
    
    			Page.ClientTarget="";
    			HttpBrowserCapabilities bc = Page.Request.Browser;
    			if (bc.Browser.ToUpper().IndexOf("IE")>=0)
    				_ie=true;
    			else
    			{
    				_ie=false;
    				if (bc.MajorVersion>=5)
    					Page.ClientTarget="uplevel";
    			}
    
    		}
    Metodo Page_Load della pagina in cui setto le proprietà dei validatori in base al tipo di browser (per FireFox devo disabilitare EnableClientScript):

    codice:
     
    		private void Page_Load(object sender, System.EventArgs e)
    		{
    
    			if (!Page.IsPostBack) 
    			{
    
    
    			if (!this._ie)
    			{
    				RequiredFieldValidator_ApplicationID.EnableClientScript=false;
    				RegularExpressionValidator_ApplicationID.EnableClientScript=false;
    				ValidationSummary_Page.EnableClientScript=false;
    			}
    
    			}
    
    
    		}

    Click su un pulsante che deve fare qualche operazione...
    (Controllo Page.IsValid solo per browser non IE, perchè in tal caso la validazione è già stata fatta lato-client)

    codice:
     
    		private void Button_ApplicationAction_Click(object sender, System.EventArgs e)
    		{
    			if (!Page.IsValid)
    			{						
    				if (!this._ie)
    				{
    					string sMessage="";
    					for (int j=0;j<Page.Validators.Count;j++)
    					{
    						if (Page.Validators[j].IsValid==false)
    							sMessage+=Page.Validators[j].ErrorMessage+"\\r\\n";
    					}
    					CreateStartUpErrorScript(sMessage);
    				}
    			}
    			else
    			{
    //fai quello che devi fare...
    			}
    
    		}

    Per creare MessageBox lato-client:

    codice:
    		private void CreateStartUpErrorScript(string ErrorMessage)
    		{
    			string script = @"
    			<script language=""javascript"">
    			alert(""" + ErrorMessage + @""");
    			</script>";
    			if (!Page.IsStartupScriptRegistered("CheckError"))
    				Page.RegisterStartupScript("CheckError",script);
    		}

  2. #2
    Utente di HTML.it L'avatar di Nazareno
    Registrato dal
    Mar 2001
    residenza
    Udine
    Messaggi
    176

    Scusate...


  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Premetto che ho fatto solo così:
    una pagina basic con un TextBox e un RequiredFieldValidator

    nell'evento init ho messo Page.ClientTarget = "uplevel"

    la pagina questa volta fa una chiamata al codice javascript di sistema per i validatori, ma non funziona perchè trova delle parole riservate e forse anche per altro

    Pietro

  4. #4
    Utente di HTML.it L'avatar di Nazareno
    Registrato dal
    Mar 2001
    residenza
    Udine
    Messaggi
    176

    Mah...

    Ti posso assicurare che l'ho provato mille volte e funziona bene, ma devi essere sicuro di disabilitare la proprietà EnableClientScript per tutti i validatori se il browser non è IE, per evitare che il Framework inserisca gli script lato-client per IE anche in FireFox. Inoltre Page.ClientTarget="uplevel" devi farlo solo per browser non IE. Il controllo Page.IsValid va fatto solo per i controlli con CausesValidation=true

  5. #5
    Utente di HTML.it L'avatar di Nazareno
    Registrato dal
    Mar 2001
    residenza
    Udine
    Messaggi
    176

    Prova questo...

    Prova questa pagina nel sito della mia azienda. Non inserire nessun valori e premi sul pulsante "INVIA" in fondo alla form. Con IE noterai che la validazione è lato-client, con FireFox deve fare un "viaggetto" sul server.

    http://www.dialinformatica.com/Areas...urriculum.aspx

  6. #6
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116

    Re: Prova questo...

    Originariamente inviato da Nazareno
    Prova questa pagina nel sito della mia azienda. Non inserire nessun valori e premi sul pulsante "INVIA" in fondo alla form. Con IE noterai che la validazione è lato-client, con FireFox deve fare un "viaggetto" sul server.

    http://www.dialinformatica.com/Areas...urriculum.aspx
    Per prima cosa debbo ancora ringraziarti per la tua disponibilità.

    A me, con Firefox non funziona. O meglio, non fa quello che vorrei. Mi spiego, non funziona la validità lato client. La pagina viene sempre spedita al server. Vi sono errori di javascript rilevata dal browser. Insomma, è proprio la libreria microsoft javascript per la validazione che è volutamente sbagliata :master:

    Ciao
    Pietro

  7. #7
    Utente di HTML.it L'avatar di Nazareno
    Registrato dal
    Mar 2001
    residenza
    Udine
    Messaggi
    176

    Non mi ero spiegato bene...

    Scusa, ma allora non mi ero spiegato bene. E' chiaro che la validazione lato-client funziona solo con IE, e non con Firefox, questo è pacifico. Quello che volevo farti vedere con il mio codice è che con leggerissime modifiche, puoi usare i validatori anche su Firefox, ma rinunciando alla validazione lato-client. La cosa, credimi, è molto comoda, perchè non ti obbliga a fare pagine diverse per Firefox o a implementare validazioni custom.
    Gli errori JavaScript che ti da il nostro sito sono dovuti al fatto che all'epoca della costruzione ci siamo dimenticati di settare a False le proprietà EnableClientScript dei validatori.
    Ciao.

  8. #8
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116

    Re: Non mi ero spiegato bene...

    Originariamente inviato da Nazareno
    Scusa, ma allora non mi ero spiegato bene. E' chiaro che la validazione lato-client funziona solo con IE, e non con Firefox, questo è pacifico. Quello che volevo farti vedere con il mio codice è che con leggerissime modifiche, puoi usare i validatori anche su Firefox, ma rinunciando alla validazione lato-client. La cosa, credimi, è molto comoda, perchè non ti obbliga a fare pagine diverse per Firefox o a implementare validazioni custom.
    Gli errori JavaScript che ti da il nostro sito sono dovuti al fatto che all'epoca della costruzione ci siamo dimenticati di settare a False le proprietà EnableClientScript dei validatori.
    Ciao.
    Allora, dico il mio parere, per amore di discussione. Tu legittimi il fatto che i validatori funzionino solo su IE: dici che è chiaro, che è pacifico . Secondo me è un punto di vista sbagliato. Mi spiego. Il file C:\Inetpub\wwwroot\aspnet_client\system_web\1_1_43 22\WebUIValidation.js della Microsoft è sbagliato. Contiene errori e non funziona bene neanche con IE. Io ho trovato solo un errore, ma tu capisci che è strano che in tanti anni non sia stato corretto. Questo file js è sbagliato poi perchè fa uso di istruzioni proprietarie in modo superfluo, inutile e non rispettoso verso gli utenti. Io non sono esperto in javascript però mi sento di dire che con un piccolo sforzo si potrebbero cambiare queste istruzioni proprietarie con istruzioni standard funzionanti benissimo anche con IE.
    Inoltre, gli errori segnalati da Firefox, non sono dovuti al vostro sito, cioè a voi, ma alla Microsoft che, ripeto, ha volutamente scritto male quel file js.


    Ma ritornando alla fine alla domanda iniziale del nostro amico, io ribadisco che uso i Validatori quasi sempre e ne sono anche contento. Però uso IE obbligato in Intranet. Questo solo per dire che non esiste una soluzione ottimale, ma che bisogna valutare la cosa caso per caso.

    Ciao
    Pietro

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 © 2026 vBulletin Solutions, Inc. All rights reserved.