2010-03-18 12 views
1

Vous devenez fou maintenant. J'ai une solution MVC que j'ai mise à jour de MVC 1 à 2. Tout fonctionne bien ... sauf la validation!Problème d'annotations de données MVC 2

Voici quelques code:

Dans le contrôleur:

using System; 
using System.Collections.Generic; 
using System.Globalization; 
using System.Linq; 
using System.Security.Principal; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Security; 
using System.Web.UI; 
using MF.Services.Authentication; 
using System.ComponentModel; 
using System.ComponentModel.DataAnnotations; 

namespace MF.Controllers 
{ 
    //basic viewmodel 
    public class LogOnViewData 
    { 
    [Required] 
    public string UserName { get; set; } 

    [Required] 
    public string Password { get; set; } 
    } 

    [HandleError] 
public class AccountController : Controller 
{ 
     [HttpPost] 
     public ActionResult LogOn(LogOnViewData lvd, string returnUrl) 
     { 

     if (ModelState.IsValid) 
     { 
     //do stuff - IsValid is always true 
     } 
     } 
    } 
} 

Le ModelState est toujours valide. Le modèle est correctement rempli cependant. Par conséquent, si je laisse vide à la fois le nom d'utilisateur et le mot de passe et que je publie le formulaire, l'état du modèle est toujours valide. Argh!

Informations supplémentaires: utilisation de la carte de structure pour IoD. Auparavant, avant la mise à niveau vers MVC 2 était l'utilisation de la bibliothèque d'annotations de données MS ainsi avait dans mon global.asax.cs: ModelBinders.Binders.DefaultBinder = new Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder();

Avoir enlevé cela maintenant. Je suis sûr que je fais quelque chose de vraiment basique et faux. Si quelqu'un pouvait le signaler, ce serait merveilleux. Cheers

Répondre

0

À mi-chemin du développement de MVC2, ils sont passés de la validation d'entrée à la validation de modèle, ce qui devrait dans tous les cas valider complètement votre objet. Assurez-vous d'utiliser la dernière version (RTM). Toutefois, [Required] indique simplement que l'attribut ne doit pas être null. Malheureusement, String.Empty - qui est la valeur par défaut pour les chaînes - n'est pas null, donc la validation du modèle passera pour les chaînes vides.

Voir this post by Brad Wilson for important details.

En tant que solution, vous pouvez utiliser [RegularExpression("....")] pour imposer des restrictions sur la longueur minimale de chaîne et les caractères autorisés.

+0

Oh je vois - merci. Cela a vraiment du sens :) Cependant, j'ai lancé un tout nouveau projet MVC qui a une validation sur l'action de contrôle de connexion qui est presque exactement la même que la mienne. Cela fonctionne bien, bien sûr. Je suis juste un peu perplexe quant à la différence! Merci encore – Louzzzzzz

+0

L'a corrigé! Retiré puis ajouté à nouveau toutes les références dans mon projet web et tout fonctionne comme prévu. – Louzzzzzz