|
using System;
using System.Collections.ObjectModel;
using System.ComponentModel.DataAnnotations;
namespace IssueVision.Data.Web
{
/// <summary>
/// PasswordResetUser class client-side extensions
/// </summary>
public partial class PasswordResetUser
{
/// <summary>
/// Stores the password the user entered in the registration UI,
/// even if it is invalid. This way we can validate the password
/// confirmation adequately all the times
/// </summary>
/// <remarks>
/// This gets set on the <see cref="System.Windows.Controls.PasswordBox.PasswordChanged"/> event
/// </remarks>
public string ActualPassword { get; set; }
[Display(Name = "PasswordConfirmationLabel", ResourceType = typeof(IssueVisionResources))]
[Required(ErrorMessageResourceName = "ValidationErrorRequiredField", ErrorMessageResourceType = typeof(ErrorResources))]
[CustomValidation(typeof(PasswordResetUser), "CheckPasswordConfirmation")]
public string PasswordConfirmation
{
get
{
return this._passwordConfirmation;
}
set
{
this.ValidateProperty("PasswordConfirmation", value);
this._passwordConfirmation = value;
this.RaisePropertyChanged("PasswordConfirmation");
}
}
private string _passwordConfirmation;
/// <summary>
/// Custom validation of whether new password and confirm password match
/// </summary>
/// <param name="passwordConfirmation"></param>
/// <param name="validationContext"></param>
/// <returns></returns>
public static ValidationResult CheckPasswordConfirmation(string passwordConfirmation, ValidationContext validationContext)
{
PasswordResetUser currentUser = (PasswordResetUser)validationContext.ObjectInstance;
if (!string.IsNullOrEmpty(currentUser.ActualPassword) &&
!string.IsNullOrEmpty(passwordConfirmation) &&
currentUser.ActualPassword != passwordConfirmation)
{
return new ValidationResult(ErrorResources.ValidationErrorPasswordConfirmationMismatch, new string[] { "PasswordConfirmation" });
}
return ValidationResult.Success;
}
/// <summary>
/// Try validate the specified property for PasswordResetUser class
/// </summary>
/// <param name="propertyName"></param>
/// <returns></returns>
public bool TryValidateProperty(string propertyName)
{
if (string.IsNullOrEmpty(propertyName))
{
throw new ArgumentNullException("propertyName");
}
if (propertyName == "Name" || propertyName == "NewPassword"
|| propertyName == "PasswordConfirmation" || propertyName == "PasswordAnswer")
{
ValidationContext context = new ValidationContext(this, null, null) { MemberName = propertyName };
var validationResults = new Collection<ValidationResult>();
if (propertyName == "Name")
return Validator.TryValidateProperty(this.Name, context, validationResults);
else if (propertyName == "NewPassword")
return Validator.TryValidateProperty(this.NewPassword, context, validationResults);
else if (propertyName == "PasswordConfirmation")
return Validator.TryValidateProperty(this.PasswordConfirmation, context, validationResults);
else if (propertyName == "PasswordAnswer")
return Validator.TryValidateProperty(this.PasswordAnswer, context, validationResults);
}
return false;
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Weidong has been an information system professional since 1990. He has a Master's degree in Computer Science, and is currently a MCSD .NET