I\'d like to create a view model for a new user using the code below. The \"User\" class contains just the two properties (simplified for now) that I will persist to the databas
Just found the answer via StackOverflow and Microsoft Connect:
See:
http://connect.microsoft.com/VisualStudio/feedback/details/665793/jquery-unobtrusive-validate-equalto-fails-with-compare-attribute and JQuery 1.5 breaks Compare Validate (JQuery Validate 1.8)
To summerize, it looks like a bug in the jquery.validate.unobtrusive file that came with MVC3. The workaround is changing the following line in the jquery.validate.unobtrusive file.
element = $(options.form).find(":input[name=" + fullOtherName + "]")[0];
to
element = $(options.form).find(":input[name=" + fullOtherName.replace(".", "\\.") + "]")[0];
On Microsoft Connect, it says MS has fixed it, but i couldnt find the link to the new version. Anyways, this works for me in the meantime. Hope it helps
I fixed this issue using two fields and comparing on server (via unobtrusive JavaScript):
[Required(ErrorMessage = @"The new password is required")]
[StringLength(25, ErrorMessage = @"The new password must be at least {2} characters long", MinimumLength = 4)]
[DataType(DataType.Password)]
[Display(Name = @"New Password")]
public string NewPassword { get; set; }
[Required(ErrorMessage = @"The confirmation of password is required")]
[StringLength(25, ErrorMessage = @"The confirmation of new password must be at least {2} characters long", MinimumLength = 4)]
[DataType(DataType.Password)]
[Display(Name = @"Confirm New Password")]
public string ConfirmPassword { get; set; }
Server-side code:
[HttpPost]
public ViewResult ChangeUserPassword(ChangePasswordModel model)
{
Logger.Debug(LogBuilder.MethodEntry("ChangeUserPassword"));
if (model == null)
{
throw new ArgumentNullException("model");
}
if (model.NewPassword != model.ConfirmPassword)
{
ModelState.AddModelError("", Messages.ConfirmPasswordError);
return View(model);
}
if (ModelState.IsValid)
{
var changePasswordCompleted = false;
try
{
var userName = CurrentPerson.UserDetails.UserName;
var membershipUser = Membership.GetUser(userName);
if (membershipUser != null)
{
changePasswordCompleted = membershipUser.ChangePassword(model.OldPassword, model.NewPassword);
}
}
catch (Exception exception)
{
changePasswordCompleted = false;
Logger.Error(LogBuilder.LogMethodError("ChangeUserPassword", exception));
}
if (changePasswordCompleted)
{
return View("ChangePasswordCompleted");
}
}
ModelState.AddModelError("", Messages.ChangePasswordError);
return View(model);
}