How to properly implement "Confirm Password" in ASP.NET MVC 3?
There's already an answered question about the same subject but as it's from '09 I consider it outdated.
How to properly implement "Confirm Password" in ASP.NET MVC 3?
I'm seeing a lot of options on the Web, most of them using the CompareAttribute
in the model like this one
The problem is that definitely ConfirmPassword
shound't be in the model as it shouldn't be persisted.
As the whole unobstrusive client validation from MVC 3 rely on the model and I don't feel like putting a ConfirmPassword property on my model, what开发者_高级运维 should I do?
Should I inject a custom client validation function? If so.. How?
As the whole unobstrusive client validation from MVC 3 rely on the model and I don't feel like putting a ConfirmPassword property on my model, what should I do?
A completely agree with you. That's why you should use view models. Then on your view model (a class specifically designed for the requirements of the given view) you could use the [Compare]
attribute:
public class RegisterViewModel
{
[Required]
public string Username { get; set; }
[Required]
public string Password { get; set; }
[Compare("Password", ErrorMessage = "Confirm password doesn't match, Type again !")]
public string ConfirmPassword { get; set; }
}
and then have your controller action take this view model
[HttpPost]
public ActionResult Register(RegisterViewModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
// TODO: Map the view model to a domain model and pass to a repository
// Personally I use and like AutoMapper very much (http://automapper.codeplex.com)
return RedirectToAction("Success");
}
Take a look at the default VS2010 template for a MVC3 app.
It contains a RegisterModel (a 'ViewModel') that contains the Password and ConfirmPassword properties. The validation is set on the ConfirmPassword.
So the answer is that the Models in MVC don't have to be (usually aren't) the same as your business Models.
精彩评论