2011-01-20 24 views
32

Con MVC3 sono disponibili due nuovi meccanismi per l'aggiunta della convalida personalizzata. Queste sono (1) sottoclasse ValidationAttribute o (2) implementano IValidatableObject.IValidatableObject in MVC3 - validazione lato client

ValidationAttribute consente di aggiungere la convalida lato client relativamente semplicemente implementando IClientValidatable (e registrando un nuovo adattatore e metodo tramite jQuery).

IValidatableObject è più adatto a requisiti di convalida una tantum in cui il riutilizzo non è un'opzione. Porta anche a un codice leggermente più semplice. Sarebbe quindi la mia scelta per una serie di scenari. Sfortunatamente, non vedo un modo semplice per implementare la validazione lato client usando questo metodo.

Quindi la domanda è cosa mi manca e come si ottiene la convalida JS quando si utilizza IValidatableObject?

risposta

23

Poiché non ho ricevuto una risposta (valida), ho chiesto a un paio di persone di Microsoft e hanno confermato che non era possibile al momento.

Brad Wilson:

In questo momento, solo validatori livello di proprietà in grado di emettere sul lato client convalida (come quella allinea molto meglio con l'idea di ingresso convalida sotto forma di browser .. non esiste un "modello" per parlare di, dal punto di vista del browser).

Stuart Porri:

non ritengo si può collegare convalida del client con IValidatableObject

+0

Ciò significa che non esiste un modo semplice per agganciare una convalida javascript personalizzata sulla vista? Mi piacerebbe avere una semplice funzione che potrei collegare al meccanismo di validazione del lato client esistente. – pauloya

+0

[Un post forum ASP.NET] (http://forums.asp.net/post/5593598.aspx): * la validazione jquery valida solo i campi di input (nessuna convalida del livello del modello), quindi non esiste una mappatura naturale per la classe validazione di livello. Un modo comune per aggiungere la convalida del livello del modello è aggiungere un campo nascosto e convalidare il livello del modello al livello nascosto. * Http://stackoverflow.com/a/5817958/11683 dimostra questo approccio - con l'eccezione che il campo non è nascosto . – GSerg

+0

L'utilizzo di un attributo [Remote] sul modello potrebbe aiutare; leggi qui: http://msdn.microsoft.com/en-us/library/gg508808%28VS.98%29.aspx – Tohid

4

http://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net-mvc-3-preview-1.aspx http://blogs.msdn.com/b/stuartleeks/archive/2010/07/28/asp-net-mvc-adding-client-side-validation-to-validatepasswordlengthattribute-in-asp- net-MVC-3-anteprima-1.aspx

ASP.NET MVC 3 ora onora l'interfaccia IValidateObject quando modello vincolante (in aggiunta a tutti gli altri convalida si avvicina già supportato con MVC 2), e sarà recuperare gli errori di convalida da esso e automaticamente flag/highlight ha interessato i campi con hin a view usando gli helper per moduli HTML incorporati .

ASP.NET MVC 3 introduce anche una nuova interfaccia di IClientValidatable che permette ASP.NET MVC per scoprire a runtime se un validatore ha il supporto per la convalida del client. Questa interfaccia è stata progettata in modo che sia possibile integrare con una varietà di framework di convalida . Anche MVC 3 introduce una nuova interfaccia IMetadataAware che semplifica il modo in cui è possibile contribuire al processo di creazione ModelMetadata .

+2

Tutto questo è legato ad aggiungere la convalida lato client per convalida attributi che come ho dichiarato nella mia domanda, funziona molto bene. Sto chiedendo di aggiungere la validazione lato client a IValidatableObject. –

0

Questo article descrive un modo per accedere all'oggetto contenitore nella convalida lato client in ASP.NET MVC. È possibile utilizzare questo per iniziare a utilizzare la convalida del proprio client

+1

Ancora, questo è correlato alle annotazioni dei dati ed è specifico per MVC2. Esiste un meccanismo completamente diverso per l'aggiunta della convalida lato client per la convalida basata sugli attributi in MVC3 (IClientValidatable), che è molto più semplice da implementare rispetto al vecchio approccio DataAnnotationsModelValidator . TUTTAVIA, non sto parlando di attributi, sto parlando dell'altro modo MVC3 di convalidare: IValidatableObject. –

+0

@PaulHiles - Ciao Paul, hai trovato qualcosa di adatto per la validazione lato client in mvc? –