Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,857

    problema con validazione clientside in un Usercontrol

    Andava troppo liscia per essere vero :-)
    Ho uno userControl ripetuto x volte nella pagina dentro a un repeater.

    I controlli che lo UserControl contiene subiscono la validazione clientside e dovrebbero mostrare i problemi incontrati in un validation summary presente nello UserControl....
    Secondo voi perchè sto usando il condizionale? :-)

    Mi succede che se la validazione non passa (trattasi di un rangevalidator che verifica che io inserisca numeri interi in alcuni textbox), compaiono tanti validationSummary col messaggio di errore quanti sono gli UserControl ripetuti dal repeater.

    Come faccio?
    Un'idea che mi è venuta mentre scrivo (che quindi devo ancora provare) è di associare "al volo" un validationgroup ai controlli di ogni UC (hanno già un validationgroup ma è statico e alla fine è uguale per tutti i controlli di tutti gli UC presenti nella pagina) dovrei fare cioè in modo che ogni UC abbia il suo validationgroup e che questo risulti univoco nella pagina... ma è vita questa?
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  2. #2
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,857
    well usando il validationgroup univoco ho un summary unico nell'UC dove si verifica il problema (nel prerender dell'UC definisco il validationgroup e lo assegno ai controlli dell'UC)... risolto quindi il problema dei summary multipli
    Ultima modifica di supermac; 08-11-2017 a 12:30
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  3. #3
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,857
    hmm ho un altro problemuccio, la validazione lato client funziona a metà: segnala correttamente il problema nel validationsummary, blocca il postback e l'azione associata al textchanged del campo MA poi non restituisce il focus al campo col problema...
    L'utente quindi legge che c'è un problema ma il campo resta valorizzato con i dati sbagliati... c'è qualche parametro che devo impostare sul validatore per correggere questo comportamento?
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  4. #4
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,857
    SetFocusOnError="true"
    ... ma perchè poi devo dirglielo io? Credevo fosse true per default nella classe BaseValidator...



    PS: ogni tanto rileggo alcuni miei thread e trovo dei monologhi... sembra che postare qui sia come fare brainstorming da soli
    Ultima modifica di supermac; 08-11-2017 a 12:42
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  5. #5
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    il problema e' che se non metti un po' di codice e' normale che siano monologhi...

    ok le idee/soluzioni, ma concretamente poi su cosa ci si basa per aiutarti ?

  6. #6
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,857
    non è un problema, anzi mi fa piacere anche provare a risolvere da solo ma in alcuni casi (come questo) effettivamente mi tocca inondare di codice il thread

    Questa è una parte del mio UC:

    codice:
    <asp:ValidationSummary ID="ValidationSummary1" runat="server" ValidationGroup="pitem" DisplayMode="List" CssClass="alert alert-danger col-md-12" role="alert" />
    ...
    <div class="col-xs-12 col-sm-9 col-md-5">
        <p>
            Quantità:
            <asp:TextBox ID="qty" runat="server" MaxLength="3" AutoPostBack="true" Width="50" CausesValidation="true" ValidationGroup="pitem"></asp:TextBox>
            <asp:RangeValidator ID="rv1" runat="server" ControlToValidate="qty" MinimumValue="0" MaximumValue="999" ErrorMessage="Sono consentite solo quantità comprese tra 0 e 999" Display="None" ValidationGroup="pitem" SetFocusOnError="true"></asp:RangeValidator>
        </p>
        <p>
        Sconti:
        <asp:TextBox ID="sc1" runat="server" MaxLength="3" Width="30" AutoPostBack="true" CausesValidation="true" ValidationGroup="pitem"></asp:TextBox>
        <asp:RangeValidator ID="rvs1" runat="server" ControlToValidate="sc1" Type="Integer" MinimumValue="0" MaximumValue="99" ErrorMessage="Sconto1: sono consentite solo quantità comprese tra 0 e 99" Display="None" ValidationGroup="pitem" SetFocusOnError="true"></asp:RangeValidator>
        <asp:TextBox ID="sc2" runat="server" MaxLength="3" Width="30" AutoPostBack="true" CausesValidation="true" ValidationGroup="pitem"></asp:TextBox>
        <asp:RangeValidator ID="rvs2" runat="server" ControlToValidate="sc2" Type="Integer" MinimumValue="0" MaximumValue="99" ErrorMessage="Sconto2: sono consentite solo quantità comprese tra 0 e 99" Display="None" ValidationGroup="pitem" SetFocusOnError="true"></asp:RangeValidator>
        <asp:TextBox ID="sc3" runat="server" MaxLength="3" Width="30" AutoPostBack="true" CausesValidation="true" ValidationGroup="pitem"></asp:TextBox>
        <asp:RangeValidator ID="rvs3" runat="server" ControlToValidate="sc3" Type="Integer" MinimumValue="0" MaximumValue="99" ErrorMessage="Sconto3: sono consentite solo quantità comprese tra 0 e 99" Display="None" ValidationGroup="pitem" SetFocusOnError="true"></asp:RangeValidator>
        <asp:TextBox ID="sc4" runat="server" MaxLength="3" Width="30" AutoPostBack="true" CausesValidation="true" ValidationGroup="pitem"></asp:TextBox>
        <asp:RangeValidator ID="rsv4" runat="server" ControlToValidate="sc4" Type="Integer" MinimumValue="0" MaximumValue="99" ErrorMessage="Sconto4: sono consentite solo quantità comprese tra 0 e 99" Display="None" ValidationGroup="pitem" SetFocusOnError="true"></asp:RangeValidator>
        <asp:TextBox ID="sc5" runat="server" MaxLength="3" Width="30" AutoPostBack="true" CausesValidation="true" ValidationGroup="pitem"></asp:TextBox>
        <asp:RangeValidator ID="rsv5" runat="server" ControlToValidate="sc5" Type="Integer" MinimumValue="0" MaximumValue="99" ErrorMessage="Sconto5: sono consentite solo quantità comprese tra 0 e 99" Display="None" ValidationGroup="pitem" SetFocusOnError="true"></asp:RangeValidator>
        <asp:TextBox ID="sc6" runat="server" MaxLength="3" Width="30" AutoPostBack="true" CausesValidation="true" ValidationGroup="pitem"></asp:TextBox>
        <asp:RangeValidator ID="rsv6" runat="server" ControlToValidate="sc6" Type="Integer" MinimumValue="0" MaximumValue="99" ErrorMessage="Sconto6: sono consentite solo quantità comprese tra 0 e 99" Display="None" ValidationGroup="pitem" SetFocusOnError="true"></asp:RangeValidator>
    </p>
    
    
    </div>
    ...
    Ho X di questi UC nella pagina, ognuno relativo ad un prodotto da inserire in un ordine: sul prerender dell'UC rinomino il validationgroup dei controlli in modo che diventino "pitem"&cod.articolo e così ho dei validationgroup univoci per ogni articolo/ogni UC.

    L'autopostback sui controlli è lì perchè quando viene scritto qualcosa negli input della quantità o degli sconti, il dato viene memorizzato in db e viene lanciata anche la funzioncina che ricalcola il totale di riga e aggiorna il totale di pagina.

    Va tutto mediamente bene, è solo il comportamento dei validatori che mi lascia un po' insoddisfatto.

    Quando infatti uno scrive, ad esempio, un decimale in uno dei controlli degli sconti, parte la validazione lato client, mostra il problema nel suo summary e sposta il focus sul controllo col problema.
    Mi piacerebbe che ora il campo mantenesse il focus (magari anche evidenziato o svuotato del valore sbagliato) finchè l'utente non corregge il problema INVECE l'utente può abbandonare il campo e lasciare lì l'errore, dando così la sensazione che il valore sia stato inserito in db anche se segnalato come sbagliato.

    Credo che avrei il problema anche se invece di fare l'inserimento in db sul textchanged dei campi avessi un bottone che conferma le variazioni fatte sui campi...
    Ultima modifica di djciko; 09-11-2017 a 12:36
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  7. #7
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,857
    ERRATA CORRIGE
    vorrei che il campo con l'errore riprendesse il valore che aveva prima che gli venisse inserito dentro un valore sbagliato

    Vedasi l'immagine:
    - nella situazione 1 ho il mio UC come appena caricato
    - nella situazione 2 ho inserito un valore decimale in un campo sconto, viene correttamente mostrato l'errore e il focus va sul campo con l'errore; il numero sbagliato non è stato inserito in db (giustamente)
    - nella situazione 3 ho inserito un valore corretto in un altro campo sconto: questo valore non è stato inserito in db perchè sul postback è partita la validazione dei campi ed ha trovato ancora l'errore sullo sconto precedente

    L'ideale sarebbe che (come sopra), se non passano la validazione, i campi riprendessero il valore iniziale perchè altrimenti l'utente pensa che i dati vadano lo stesso in db...

    Senzanome.jpg
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  8. #8
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,857
    altra cosa molto simpatica scoperta or ora:
    il rangevalidator segnala errore se in uno qualsiasi dei campi inserisco caratteri che non siano numeri A MENO CHE non inserisca solo uno spazio... in quel caso la validazione non segnala nessun errore e mi fa importare un carattere vuoto in un campo integer con conseguente eccezione!
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  9. #9
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    Sinceramente, vista la quantita' di carne al fuoco, io farei i controlli lato server ed eliminerei i ValidationSummary.
    Tieni presente che e' una metodologia vecchia, ora c'e' anche la validazione jQuery https://jqueryvalidation.org/documentation/ ed anche altro.


    comunque, tu hai inserito soltanto RangeValidators, non RequiredValidators, per questo ti fa passare lo spazio che non classifica ne' come numero ne' come altro...metti anche i Required che credo sia la soluzione piu' veloce.


    [per il resto dei problemi, a dire il vero non ho ben capito le dinamiche, ma credo sia soltanto un fatto di qualche riga di codice in piu' per fare cio' che dici (rimpiazzo con blank, etc)]

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