암호 확인을 위한 데이터 주석
내 사용자 모델에는 입력 필드의 유효성을 검사하기 위한 다음과 같은 데이터 주석이 있습니다.
[Required(ErrorMessage = "Username is required")]
[StringLength(16, ErrorMessage = "Must be between 3 and 16 characters", MinimumLength = 3)]
public string Username { get; set; }
[Required(ErrorMessage = "Email is required"]
[StringLength(16, ErrorMessage = "Must be between 5 and 50 characters", MinimumLength = 5)]
[RegularExpression("^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$", ErrorMessage = "Must be a valid email")]
public string Email { get; set; }
[Required(ErrorMessage = "Password is required"]
[StringLength(255, ErrorMessage = "Must be between 5 and 255 characters", MinimumLength = 5)]
public string Password { get; set; }
[Required(ErrorMessage = "Confirm Password is required"]
[StringLength(255, ErrorMessage = "Must be between 5 and 255 characters", MinimumLength = 5)]
public string ConfirmPassword { get; set; }
하지만 Confirm Password(암호 확인)가 Password(암호)와 동일한지 확인하는 방법을 찾는 데 어려움이 있습니다.제가 알기로는 다음과 같은 검증 절차만 존재합니다.Required, StringLength, Range, RegularExpression
.
제가 여기서 뭘 할 수 있을까요?감사해요.
사용 중인 경우ASP.Net MVC 3
사용할 수 있습니다.System.Web.Mvc.CompareAttribute
.
사용 중인 경우ASP.Net 4.5
그것은 에 있습니다.System.Component.DataAnnotations
.
[Required(ErrorMessage = "Password is required")]
[StringLength(255, ErrorMessage = "Must be between 5 and 255 characters", MinimumLength = 5)]
[DataType(DataType.Password)]
public string Password { get; set; }
[Required(ErrorMessage = "Confirm Password is required")]
[StringLength(255, ErrorMessage = "Must be between 5 and 255 characters", MinimumLength = 5)]
[DataType(DataType.Password)]
[Compare("Password")]
public string ConfirmPassword { get; set; }
편집: 대상MVC2
아래 로직 사용, 사용PropertiesMustMatch
대신Compare
속성 [아래 코드는 기본값에서 복사됩니다.MVCApplication
프로젝트 템플릿.]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property, AllowMultiple = true, Inherited = true)]
public sealed class PropertiesMustMatchAttribute : ValidationAttribute
{
private const string _defaultErrorMessage = "'{0}' and '{1}' do not match.";
private readonly object _typeId = new object();
public PropertiesMustMatchAttribute(string originalProperty, string confirmProperty)
: base(_defaultErrorMessage)
{
OriginalProperty = originalProperty;
ConfirmProperty = confirmProperty;
}
public string ConfirmProperty { get; private set; }
public string OriginalProperty { get; private set; }
public override object TypeId
{
get
{
return _typeId;
}
}
public override string FormatErrorMessage(string name)
{
return String.Format(CultureInfo.CurrentUICulture, ErrorMessageString,
OriginalProperty, ConfirmProperty);
}
public override bool IsValid(object value)
{
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(value);
object originalValue = properties.Find(OriginalProperty, true /* ignoreCase */).GetValue(value);
object confirmValue = properties.Find(ConfirmProperty, true /* ignoreCase */).GetValue(value);
return Object.Equals(originalValue, confirmValue);
}
}
비교 주석을 사용하여 두 값을 비교할 수 있으며 다운스트림 어디에서도 유지되지 않는지 확인해야 할 경우(예: EF를 사용하는 경우) NotMapping을 추가하여 엔티티를 무시할 수도 있습니다. ->DB 매핑
사용 가능한 데이터 주석의 전체 목록은 다음을 참조하십시오.
https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations(v=vs.110).aspx
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
[Required]
[DataType(DataType.Password)]
[Compare("Password")]
[NotMapped]
public string ConfirmPassword { get; set; }
다른 데이터 주석은 선택 사항입니다.요구 사항에 따라 추가할 수 있지만 암호 비교 작업을 구현하려면 이 작업이 필요합니다.
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
[Required]
[DataType(DataType.Password)]
[Compare("Password")]
public string ConfirmPassword { get; set; }
블레이저를 위하여EditForm
확인
위의 답변은 메시지가 표시되지 않아 저에게 효과가 없었습니다.
[AttributeUsage(AttributeTargets.Property, AllowMultiple = true, Inherited = true)]
public sealed class PropertyMustMatchAttribute : ValidationAttribute
{
private const string _defaultErrorMessage = "'{0}' and '{1}' do not match.";
public PropertyMustMatchAttribute(string originalProperty)
: base(_defaultErrorMessage)
{
OriginalProperty = originalProperty;
}
public string OriginalProperty { get; }
protected override ValidationResult IsValid(object value,
ValidationContext validationContext)
{
var properties = TypeDescriptor.GetProperties(validationContext.ObjectInstance);
var originalProperty = properties.Find(OriginalProperty, false);
var originalValue = originalProperty.GetValue(validationContext.ObjectInstance);
var confirmProperty = properties.Find(validationContext.MemberName, false);
var confirmValue = confirmProperty.GetValue(validationContext.ObjectInstance);
if (originalValue == null)
{
if (confirmValue == null)
{
return ValidationResult.Success;
}
return new ValidationResult(ErrorMessage,
new[] { validationContext.MemberName });
}
if (originalValue.Equals(confirmValue))
{
return ValidationResult.Success;
}
return new ValidationResult(ErrorMessage,
new[] { validationContext.MemberName });
}
}
언급URL : https://stackoverflow.com/questions/13237193/data-annotation-to-validate-confirm-password
'source' 카테고리의 다른 글
루비 스크립트 파일을 레일 콘솔에 전달 (0) | 2023.06.13 |
---|---|
주피터 노트북의 커널 제거 (0) | 2023.06.13 |
Flutter : 코드의 각 목록 항목 사이에 구분자를 추가하려면 어떻게 해야 합니까? (0) | 2023.06.13 |
그룹당 여러 변수(예: 합, 평균) 집계/요약 (0) | 2023.06.13 |
Linux에서 pid_t, uid_t, gid_t의 크기 (0) | 2023.06.13 |