2013-03-28 2 views
5

Quindi ho già scritto un metodo di convalida jQuery personalizzato. Ed è legato a 1 o più elenchi a discesa individuali. (Sono in asp.net, btw)jQuery Validator in un "Livello pagina"

jQuery.validator.addMethod("dropdownBoxHasItemSelected", function (value, select, arg) { 
    var returnValue = false; 
    var selectedIndex = $(select).prop("selectedIndex"); 
    if (selectedIndex != 0) { 
     returnValue = true; 
    } 
    return returnValue; 
}, "Please select a item."); 

Quindi questa non è la mia domanda.

Ho qualche convalida che deve essere eseguita a un "livello di pagina". O forse a livello "GridView" è un modo migliore per esprimerlo.

Ecco lo scenario: (sto usando dati resi-up per rendere la spiegazione più facile andare, alias, io in realtà non hanno Giocattoli e Foods)

ho una visualizzazione a griglia.

Column A of the gridview is of no consequence of this, but it exists. 
Column B of the gridview has a DropDownList for "FavoriteToy". 
Column C of the gridview has a DropDownList for "FavoriteFood". 

Quindi le regole vanno in questo modo.

Per ogni riga nella gridview:

You must pick a FavoriteToy or a FavoriteFood for each row. 
You can pick a FavoriteToy OR a FavoriteFood, but not both on the same row. 
If you pick a FavoriteToy of "TeddyBear" in RowX, none of the other rows can have TeddyBear chosen. (Aka, each row must have a distinct FavoriteToy chosen) 
If you pick a FavoriteFood of "AppleButter" in RowX, none of the other rows can have AppleButter chosen. (Aka, each row must have a distinct FavoriteFood chosen) 

nuove righe possono essere aggiunti al gridview se desiderato. C'è anche un pulsante "Rimuovi", nel caso in cui l'utente abbia esaurito tutte le combinazioni FavoriteToy e FavoriteFood.

Ora, ho scritto tutta la logica di convalida (usando la sintassi jQuery per controllare i valori e ricominciare tutto) bene.

Sto cercando un consiglio su come collegare il "validatore generale della vista della griglia", usando jQuery.validator.addMethod.

Immagino di poterlo collegare ad un asp: Label (un "input" di tipo = "testo" sul lato client), quindi viene visualizzato il messaggio di errore.

O forse, la vista griglia viene visualizzata come "tabella" sul lato client.

Qualche consiglio in generale?

========================================= ======================

Quello che ho messo nella misura in cui:

L'asp: controllo di rete:

<asp:HiddenField ID="hidGridViewValidatorPlaceHolder" runat="server" /> 

e il seguente metodo

jQuery.validator.addMethod("gridViewValiatorMethod", function (value, select, arg) { 
    var returnValue = true; 
    var errorMsg = SuperValidationWrapper(); 
    if (errorMsg != "") { 
     alert(errorMsg); 
     returnValue = false; 
    } 
    return returnValue; 
}, "Please address the issues in the gridview."); 

SuperValidationWrapper() presenta tutte le loopty-loop. E restituisco una stringa concatenata di problemi. Non mi piace, ma è quello che ho fatto.

La casella di avviso fornisce i dettagli e il testo "Per favore, risolvi i problemi nella griglia". si presenta se ci sono problemi.

Eventuali miglioramenti sono apprezzati.

+2

+1 Per "alias, io in realtà non hanno giocattoli e alimenti" –

+0

Ah! Mi piace mantenere l'attenzione sul problema reale e non spiegare i miei oggetti di dominio, ecc. Ecc. Ho questo libro modello di progettazione C# che fa il pattern Abstract Factory usando "Swim Lanes" ...... e ogni volta che leggilo, non ho idea di cosa stia dicendo. Cattivo esempio per (la maggior parte degli sviluppatori). Ma una app di Toys and Foods sembra davvero divertente! – granadaCoder

risposta

1

Validator è progettato per convalidare i campi, ma poiché non si desidera convalidare un campo, non è possibile associare l'espressione a un campo.

Hai davvero bisogno di mettere la logica di "validazione pagina" nel gestore presentare

http://docs.jquery.com/Plugins/Validation/validate#options

+0

Questo metodo imposta i gestori di eventi per invio, focus, keyup, sfocatura e clic per attivare la convalida dell'intero modulo. Grazie, vedrò un refactoring un po 'basato su quel suggerimento. – granadaCoder