سؤال

أرغب في إنشاء سمة التحقق من الصحة المخصصة لـ MVC2 لعنوان بريد إلكتروني لا يرث من RegularexPressionAttribute ولكن يمكن استخدامه في التحقق من صحة العميل. يمكن لأي شخص لي نقطة في الاتجاه الصحيح؟

جربت شيئًا بسيطًا مثل هذا:

[AttributeUsage( AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false )]
public class EmailAddressAttribute : RegularExpressionAttribute
{
    public EmailAddressAttribute( )
        : base( Validation.EmailAddressRegex ) { }
}

لكن يبدو أنه لا يعمل مع العميل. ومع ذلك ، إذا استخدمت regularexpression (التحقق من الصحة.

هل كانت مفيدة؟

المحلول

تحتاج إلى تسجيل محول للسمة الجديدة من أجل تمكين التحقق من جانب العميل.

نظرًا لأن RegularexPressionAttribute يحتوي بالفعل على محول ، وهو RegularexPressionAttributeAdeAdapter ، كل ما عليك فعله هو إعادة استخدامه.

استخدم مُنشئًا ثابتًا للحفاظ على جميع الكود الضروري داخل نفس الفئة.

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple  = false)]
public class EmailAddressAttribute : RegularExpressionAttribute
{
    private const string pattern = @"^\w+([-+.]*[\w-]+)*@(\w+([-.]?\w+)){1,}\.\w{2,4}$";

    static EmailAddressAttribute()
    {
        // necessary to enable client side validation
        DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(EmailAddressAttribute), typeof(RegularExpressionAttributeAdapter));
    }

    public EmailAddressAttribute() : base(pattern)
    {
    }
}

لمزيد من المعلومات ، الخروج من هذا المنشور يشرح العملية الكاملة.http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

نصائح أخرى

صفحة CustomValidationAttribute Class MSDN لديه بعض الأمثلة على ذلك الآن. Phil Haacked Post قديم.

انظر إلى المدقق العالمي المعتمد على الممتلكات في هذه مقالة - سلعة

هل حاولت استخدام تعليقات البيانات؟

هذا هو مشروع التعليقات التوضيحية الخاصة بي باستخدام system.componentmodel.dataannotations ؛

public class IsEmailAddressAttribute : ValidationAttribute
{
  public override bool IsValid(object value)
  {
    //do some checking on 'value' here
    return true;
  }
}

هذا في مشروع النماذج الخاص بي

namespace Models
{
    public class ContactFormViewModel : ValidationAttributes
    {
        [Required(ErrorMessage = "Please provide a short message")]
        public string Message { get; set; }
    }
}

هذا هو وحدة التحكم الخاصة بي

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult ContactUs(ContactFormViewModel formViewModel)
{
  if (ModelState.IsValid)
  {
    RedirectToAction("ContactSuccess");
  }

  return View(formViewModel);
}

ستحتاج إلى Google DataAntations حيث تحتاج إلى الحصول على المشروع وتجميعه. سأفعل ذلك ولكني بحاجة إلى الحصول على Outta هنا لفترة طويلة مع نهاية.

أتمنى أن يساعدك هذا.

تعديل

وجدت هذا على أنه Google سريع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top