2010-12-10 34 views
3

Nous avons deux modèles de données: en lecture seule Visualiser les modèles allant au client et les modèles "Contrôle" renvoyant des données modifiées. Essentiellement, ils sont les mêmes, et ont toutes les annotations de données comme celle-ci sur les:Annotations de données ASP.NET: comment partager avec un client JSON?

// Require nothing but one or more digits 
[RegularExpression(@"^\d+$", ErrorMessage = "*")] 
public string productid {get;set;} 

Tous notre communication passe par contrôleur en utilisant les méthodes JsonResult et Json().

Comment le client pourrait-il honorer ces annotations de données? Plus précisément, comment un plugin JQuery like validate peut-il recevoir ces expressions régulières, requises, plages, etc. pour l'utiliser lui-même?

Nous avons une réponse qui inclut un objet d'en-tête avec des collections imbriquées (comme une liste de produits). Nous pensions que le Regex pourrait exister dans l'en-tête, puis appliqué à tous les champs de formulaire. Mais comment pouvons-nous traduire les annotations en un objet sérialisé JSON?

Répondre

2

Voir this article de blog. Pour l'essentiel, vous appelez une méthode MVC Html Helper <% Html.EnableClientValidation();%> qui génère du code JSON sur la page. Ensuite, il y a une méthode de traduction dans le MicrosoftMvcJQueryValidation.js qui alimente jquery valider avec les annotations de données pour chaque champ.


mise à jour des commentaires

Si vous êtes rendu le HTMLFormElements sans utiliser les contrôles mvc, il sera beaucoup plus difficile. Vous aurez probablement besoin de regarder le ViewData.ModelMetadata pour accéder aux annotations de données. avoir besoin d'utiliser un MetaDataProvider personnalisé Je considérerais vais MVC3 RC pour que je puisse utiliser e validation discrète (attribut de données)

Voici quelques liens:

+0

Que faire si vous ne faites jamais à la vue, c'est à dire, pas de page aspx? –

+0

@Dr. Zim - Je ne suis pas sûr de comprendre votre question. Voulez-vous valider les données par rapport à un modèle annoté de données ou obtenir les annotations de données dans json? La validation du client implique la participation de l'utilisateur - sans jamais "faire" à une vue, je ne vois pas comment cela est possible. –

+0

Nous utilisons les appels JQuery Ajax pour importer des données sur le client, puis utilisons des modèles Microsoft JQuery pour afficher le contenu et utilisons la liaison de données Microsoft pour lier un tableau aux éléments de formulaire. D'une manière ou d'une autre, j'ai besoin de traduire le Regex attaché aux classes en quelque chose que JQuery peut valider (par exemple). –