Interrompere postback su TextChanged

Ho una casella di testo in una pagina aspx che è un evento TextChanged collegato ad esso.
Ho anche un validatore collegati alla casella di testo.

Quando il testo viene modificato, la convalida trigger, ma nel caso ci sia un errore l’evento textchanged è ancora chiamato. Sapete se è possibile interrompere il postback su textchanged se il validatore incendi?

<asp:TextBox ID="txtQuantity" runat="server" AutoPostBack="true" ontextchanged="txtQuantity_TextChanged"></asp:TextBox>
<asp:RequiredFieldValidator ID="reqQuantity" ControlToValidate="txtQuantity" runat="server" ErrorMessage="The quantity is mandatory."></asp:RequiredFieldValidator>
InformationsquelleAutor Dante | 2009-10-06



5 Replies
  1. 3

    È possibile spostare la convalida lato client aggiunta di EnableClientScript="true" attributo. Postback non verificarsi di controllo verrà effettuato con JS.

    Diverso da quello che si può controllare se la pagina è valido quando si esegue la funzione di callback per l’evento TextChanged, in modo che per definire se la funzione può procedere. Si dovrebbe aggiungere ValidationGroup attributo a validator e chiamare Page.Validate funzione specifica che il gruppo prima di Page.IsValid è selezionata.

    Upd

    Ecco il suggerimento.

    Aggiungere la propria funzione JS, ad esempio:

    function IsValid( args ) {
            if( args.value.length == 0 ) {
                return false;
            }
            else {
                return true;
            }
        }

    In Page_Load evento aggiungere questo codice:

    txtQuantity.Attributes[ "onchange" ] = "if ( IsValid(this) == false ) return;";

    Questo non scherza auto postback quando l’input è corretto, ma evitare di postback altrimenti.

    • La proprietà EnableClientScript non evitare il postback…
    • Aggiornato risposta con la soluzione più semplice…
    • Hai ragione, e ho provato questo. Il fatto è che ho un RangeValidator che ha bisogno di un valori di Min e Max, e ho problemi con l’invio di questi due valori, in IsValid funzione. Ma la tua idea funziona. Per questo motivo ho intenzione di accettare la tua risposta anche se il problema non si è risolto..
    • È ancora possibile eseguire il client scenario lato fino. Per tale scopo, aggiungere a livello di pagina, variabile sul lato server, quindi il server di mark-up giusto qualcosa del genere: var MinValueStr = “<%= MinValue %>”; e convertire in intero prima dell’uso.
    • Che non avrebbe funzionato perché la casella di testo è in una Lista di controllo, ho bisogno di specifici valori di Min e Max per riga nella lista, ma credo di aver superato. Io condividere quando finito.
    • Che cosa succede se qualcuno disabilita JavaScript nel browser?

  2. 4

    Aggiungere CausesValidation="true" per la casella di testo e sarà bene. Se la convalida non è valido, non ci sarà alcun post indietro.

    <asp:TextBox ID="txtQuantity" runat="server" AutoPostBack="true" ontextchanged="txtQuantity_TextChanged" CausesValidation="true"></asp:TextBox>

    • Sì, ma questo evita il postback e voglio avere AutoPostback = “true” in modo da poter validare i dati all’interno della casella di testo per altre logica del programma.
    • Grazie Naveen. Si fa quello che si suppone di fare. Meraviglioso!!!
  3. 0

    provare dopo il cambiamento AutoPostBack=”true” come AutoPostBack=”false”..

    • E come è il mio evento TextChanged andando a postback poi? :s
    • Perché si desidera postback su evento textchanged..c’è la logica di business collegato con esso?
  4. 0

    Solo la condivisione di una linea, la versione più corta del accettati risposta:

    <asp:TextBox ID="txtQuantity" runat="server"
        AutoPostBack="true" ontextchanged="txtQuantity_TextChanged"
        onchange="if (this.value.length == 0) return;"></asp:TextBox>

    Avendo lo stesso problema con un RequiredFieldValidator, di cui sopra ha funzionato per me.

    Noto nag: il progettista si lamenta del fatto che “onchange” non è un valido lato server attributo.

  5. 0

    Quello che faccio, non è nel mio client funzione di convalida che ho in prova il tipo di evento, io sono in. Se l’evento mi mostra in un evento di modifica, io rivendico il validazione passata e lasciare.

    JS:

    		if (event.type === 'change') {
    			args.IsValid.true;
          return;
    		}

    Credo che questa sia la soluzione migliore, come si può lasciare che il validatore via cavo, e la casella di testo impostare come si desidera, senza più preoccuparsi del cambiamento evento che ha causato la convalida.

Lascia un commento