나는이 사용 날짜 값에 주어진 값의 범위에 따라 제한을 만들려고 노력 해요 :범위 제한, 날짜 시간
[Range(typeof(DateTime), "1/1/1971", DateTime.Now.AddDays(1).ToString())]
public DateTime date { get; set; }
을하지만, 나는 오류가 나는 변수를 사용할 수 없다는있어 그 제한에. 어떻게 그걸 얻을 수 있니?
미리 감사드립니다.
나는이 사용 날짜 값에 주어진 값의 범위에 따라 제한을 만들려고 노력 해요 :범위 제한, 날짜 시간
[Range(typeof(DateTime), "1/1/1971", DateTime.Now.AddDays(1).ToString())]
public DateTime date { get; set; }
을하지만, 나는 오류가 나는 변수를 사용할 수 없다는있어 그 제한에. 어떻게 그걸 얻을 수 있니?
미리 감사드립니다.
RangeAttribute Class 또는 RangeAttribute Constructor (Type, String, String) 설명서에 지정되어 있지 않지만 생성자는 상수 값을 필요로합니다.
특성에 상수 값이 필요하므로 사용자 지정 메타 데이터 공급자를 구현해야합니다. 그런 다음 범위의 최종 값을 동적으로 주입합니다.
public class CustomModelMetadataProvider : DataAnnotationsModelMetadataProvider
{
protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
{
base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
foreach (var attribute in attributes.OfType<RangeAttribute>())
{
if (attribute.OperandType == typeof(DateTime)
{
attribute.Maximum = DateTime.Now.AddDays(1).ToString();
}
}
}
}
또 다른 옵션은 사용자 지정 유효성 검사 특성을 만드는 것입니다. 이 줄의 어떤 것 :
public class CustomDateRangeAttribute : RangeAttribute
{
public CustomDateRangeAttribute()
{
base();
base.Maximum = DateTime.Now.AddDays(1).ToString();
}
}
좋아, 답장을 보내 주셔서 감사합니다.하지만 저의 경우 어떻게 수정합니까? – user3212730
당신의 유일한 옵션은 유효성 검사 중에 DateTime.Now.AddDays (1) -part를 수행하는 사용자 정의 범위 유효성 검사기를 작성하는 것입니다. – Mark
'[Attr (a, b, c)] '구문을 사용하여 속성을 적용 할 때,'a','b' 및'c' 인수는 항상 컴파일시의 상수 여야합니다. 이것은 C#의 한계이며 컴파일 타임에 속성을 출력 파일에 "굽는"방법입니다. 그래서'RangeAttribute' 클래스의 스펙에있을 필요는 없습니다. 다른 상황에서는 non-const를 사용할 수 있습니다. 예를 들어'var myTest = new RangeAttribute (notConst.GetType(), CalculateSomeString(), DateTime.Now.AddDays (1) .ToString()); ' 물론 그의 문제가있는 질문자. –