c# net هل التحقق من صحة DataTypeAttribute يعمل في MVC2؟




validation class mvc (4)

بقدر ما أعرف فإن System.ComponentModel.DataAnnotations.DataTypeAttribute لا يعمل في التحقق من صحة النموذج في MVC v1. فمثلا،

public class Model
{
  [DataType("EmailAddress")]
  public string Email {get; set;}
}

في الأكواد أعلاه ، لن يتم التحقق من ملكية البريد الإلكتروني في MVC v1. هل تعمل في MVC v2؟


بدلاً من ذلك ، يمكنك استخدام سمة RegularExpression مباشرةً في حقلك بدلاً من إنشاء السمة الخاصة بك والتي في النهاية ستتحقق من مطابقة regex.

[RegularExpression(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", ErrorMessage = PaErrorMessages.InvalidEmailAddress)]
public string Email { get; set; }

مثل LukLed أشار إلى أن DataTypeAttribute لا يقوم بأي عملية تحقق بشكل افتراضي. ولكنه يؤثر في النماذج المتعلقة بكيفية عرض البيانات.

على سبيل المثال ، إذا قمت باستدعاء أسلوب Html.DisplayFor() على طراز يحتوي على سمة DataType(DataType.EmailAddress) ، فسيتم تنسيق قيمته باستخدام <a href="mailto:{0}">{0}</a> (على الأقل في MVC RC2).


لا يؤثر [DataType("EmailAddress")] على التحقق من الصحة بشكل افتراضي. هذا هو أسلوب IsValid لهذه السمة (من العاكس):

public override bool IsValid(object value)
{
    return true;
}

هذا مثال على DataTypeAttribute مخصص للتحقق من صحة رسائل البريد الإلكتروني (مأخوذة من هذا الموقع http://davidhayden.com/blog/dave/archive/2009/08/12/CustomDataTypeAttributeValidationCustomDisplay.aspx ):

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple  = false)]
public class EmailAddressAttribute : DataTypeAttribute
{
    private readonly Regex regex = new Regex(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", RegexOptions.Compiled);

    public EmailAddressAttribute() : base(DataType.EmailAddress)
    {

    }

    public override bool IsValid(object value)
    {

        string str = Convert.ToString(value, CultureInfo.CurrentCulture);
        if (string.IsNullOrEmpty(str))
            return true;

        Match match = regex.Match(str);   
        return ((match.Success && (match.Index == 0)) && (match.Length == str.Length));
    }
}







data-annotations