J'ai une page d'inscription où l'utilisateur peut entrer son Prénom, Nom, Email et Mot de passe, ainsi que d'autres champs.Mettre à jour seulement une partie d'un modèle, problème de validation?
J'ai lié des attributs de validation à ce modèle (appelé "utilisateur" et créé par LINQtoSQL) et tout fonctionne bien.
Code du modèle:
[MetadataType(typeof(UserValidation))]
public partial class User { }
[Bind(Exclude = "UserID")]
[PropertiesMustMatch("Password", "ConfirmPassword", ErrorMessage = "The password and confirm password don't match.")]
public class UserValidation
{
[Required(ErrorMessage = "First name required"), StringLength(20, MinimumLength=3, ErrorMessage = "Must be between 3 and 20 characters")]
public string FirstName { get; set; }
[Required(ErrorMessage = "Last name required"), StringLength(20, MinimumLength = 3, ErrorMessage = "Must be between 3 and 20 characters")]
public string LastName { get; set; }
[Required(ErrorMessage = "Email address required"), RegularExpression("^[a-z0-9_\\+-]+(\\.[a-z0-9_\\+-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*\\.([a-z]{2,4})$", ErrorMessage = "Must be a valid email address")]
public string Email { get; set; }
[Required(ErrorMessage = "Password required"), StringLength(20, MinimumLength = 6, ErrorMessage = "Password must be between 6 and 20 characters")]
public string Password { get; set; }
[Required(ErrorMessage = "Confirm password required"), StringLength(20, MinimumLength = 6, ErrorMessage = "Password must be between 6 and 20 characters")]
public string ConfirmPassword { get; set; }
}
Après inscription et connexion, je veux que l'utilisateur de pouvoir modifier leur FirstName, LastName et E-Mail (permet d'appeler ces champs « compte ») dans une vue et " Mot de passe "dans un autre. C'est là que réside mon problème.
Lorsque je soumets un formulaire mettant à jour les données des champs Compte via le même modèle ("Utilisateur") utilisé dans l'inscription, la méthode IsValid fait apparaître une erreur ModelState pour le champ "Mot de passe" manquant.
Code contrôleur:
//
// GET /Talent/Account
public ActionResult Account()
{
string cookieUser = User.Identity.Name;
User user = userRepository.GetUserByEmail(cookieUser);
return View(user);
}
// POST /Talent/Account
[HttpPost]
public ActionResult Account(User model)
{
if (ModelState.IsValid)
{
// do something
ModelState.AddModelError("", "All good.. "+ model.FirstName + " - " + model.LastName);
}
return View(model);
}
Comment puis-je contourner ce ?? Meilleure pratique etc ...
Merci pour les conseils. Des exemples de code de base sur la façon de l'implémenter? – shahidaltaf
Créez deux classes "wrapper" pour votre classe User L2SQL. L'un est pour la création de compte, l'autre pour l'édition sans le mot de passe requis. Appliquez les attributs de validation à ces classes wrapper au lieu d'utiliser l'attribut Metadata pour les appliquer directement à la classe générée par L2SQL. –
Rend plus de sens, besoin de le voir en action. Avez-vous un exemple de code s'il vous plaît? – shahidaltaf