PDA

View Full Version : ساخت custom ValidationAttribute



aghayex
جمعه 24 آبان 1392, 13:51 عصر
با سلام
دوستان من برای اعتبار سنجی پروپرتی هام می خوام از ValidationAttribute استفاده کنم اما چون این ابزار به صورت عمومی تولید شدن نمی تونن انتظارات منو تامین کنن . حالا می خوام خودم یه ValidationAttribute بسازم و برای اعتبار سنجی کد ملی و رشته ها دوتا ساختم اما مثل ValidationAttribute که استاندارد هستن عمل نمی کنن .
اگه دوستی تا حالا به این صورت عمل کرده لطفا راهنمایی کنه :
برای رشته ها


[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)]
public class NewRequestStringAttribute : ValidationAttribute
{
public string NameProperty;

public string NamePropertyOther;
public string PropertyOther;

protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value == null)
return new ValidationResult(string.Format("{0} باید وارد شود .", NameProperty), new[] { "خطا" });

var requestValue = (string)value;

if (string.IsNullOrEmpty(requestValue.Trim()))
return new ValidationResult(string.Format("{0} باید وارد شود .", NameProperty), new[] { "خطا" });

if (PropertyOther != null)
if (requestValue.Trim() == PropertyOther.Trim())
return new ValidationResult(string.Format("{0} نمی تواند با {1} برابر باشد .", NameProperty, NamePropertyOther), new[] { "خطا" });

return ValidationResult.Success;
}
}


برای کد ملی

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public class DateAttribute : ValidationAttribute
{
public string NameProperty;

public string NamePropertyDateOld;
public int? DateOld;

protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value == null)
return ValidationResult.Success;

var dateValue = (int) value;

if (dateValue.ToString(CultureInfo.InvariantCulture). Length != 8)
return new ValidationResult(string.Format("تاریخ {0} در سیستم ناقص است .", NameProperty),new[] {"خطا"});

if (!(((dateValue % 100) >= 1 && (dateValue % 100) <= 31 && (((dateValue % 10000) / 100) >= 1 && ((dateValue % 10000) / 100) <= 6)) ||
((dateValue % 100) >= 1 && (dateValue % 100) <= 30 && (((dateValue % 10000) / 100) >= 7 && ((dateValue % 10000) / 100) <= 12))))
return new ValidationResult(string.Format("تاریخ {0} در سیستم ناقص است .", NameProperty),new[] {"خطا"});

if (dateValue > GetDate.BebDate3())
return new ValidationResult(string.Format("تاريخ {0} بزرگتر از تاريخ جاري است .", NameProperty), new[] {"خطا"});

if (DateOld != null)
if (dateValue <= DateOld)
return new ValidationResult(string.Format("تاريخ {0} کوچکتر از تاريخ {1} است .", NameProperty,NamePropertyDateOld), new[] {"خطا"});

return ValidationResult.Success;
}
}