سؤال

لقد تم تقييم xVal كما إطارا التحقق من الكيانات في ASP.Net إطار MVC.لقد اكتشفت مؤخرا أنه في كل مرة قاعدة التحقق من صحة مكسورة ، xVal يسبب excpetion أن يلقى.بالنسبة لي يبدو غير صحيحة.على سبيل المثال, عندما يقوم المستخدم بملء نموذج و ينسى لملء ثلاثة الحقول المطلوبة ، الاستثناءات الثلاثة سيتم طرح.هل هذا جيد الممارسة ؟ ( تحرير: أنا أيضا قراءة هذا ، لذا أعتقد ليست ممارسة جيدة)

ما هي الخبرات الخاصة بك باستخدام xVal?هل هناك بديل جيد التحقق إطار هذا لا رمي استثناءات ؟

شكرا

(PS:لقد لاحظت أن الكثير من الناس في هذه القراءة ، فقط أن تتيح لك معرفة أنا باستخدام بطلاقة التحقق من صحة الآن)

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

المحلول

نصائح أخرى

لا انها ليست ممارسة جيدة لإظهار الاستثناءات بدلا من بعض الرسائل البسيطة لأن لا شيء على محمل الجد خطأ...يجب عليك بدلا من ملء ModelState مع هذه الأخطاء وعرضها على شكل باستخدام

Html.ValidationMessage("EntityPropertyName");

xVal يدعم جميع هذه.وكذلك التحقق من جانب العميل قبل أن يحصل على نشر النموذج مرة أخرى.

بعض التعليمات البرمجية

عند تعيين DataAnnotations سمات الكيان الخاص بك فصول (أو بيانات التعريف الخاصة بهم رفيق الطبقات) سوف الأرجح أيضا تنفيذ صحة الأسلوب ().أفضل طريقة هي استخدام T4 التي سوف السيارات تولد تلك بالنسبة لك, لذلك لم يكن لديك إلى repeate نفس القانون مرارا وتكرارا...

public IEnumerable<ErrorInfo> Validate()
{
    IList<ErrorInfo> errors = DataAnnotationsValidationRunner.GetErrors(this).ToList<ErrorInfo>();
    return errors.AsEnumerable();
}

كل ما عليك القيام به بعد ذلك هو هذه الكلمة:

IEnumerable<ErrorInfo> errors = entityObjectInstance.Validate();
if (errors.Any())
{
    new RulesException(errors).AddModelStateErrors(filterContext.Controller.ViewData.ModelState, entityPropertyName);
}

وأتمتة هذا إلى أبعد من ذلك ، يمكنك تطبيق هذا في دعوى التصفية ، حتى التحقق من صحة سيتم التلقائي الخاص بك الكيان الأشياء التي مرت في وحدة تحكم العمل.تحكم الإجراءات تحتاج فقط إلى التحقق من ما إذا كان ModelState.IsValid() ثم.

أحد أكثر فئة سوف تحتاج هنا هو (و هو مأخوذ من شبكة الإنترنت في مكان ما):

public static class DataAnnotationsValidationRunner
{
    public static IEnumerable<ErrorInfo> GetErrors(object instance)
    {
        var metadataAttribute = instance.GetType().GetCustomAttributes(typeof(MetadataTypeAttribute), true).OfType<MetadataTypeAttribute>().FirstOrDefault();
        var metaClass = metadataAttribute != null ? metadataAttribute.MetadataClassType : instance.GetType();
        var metaClassProperties = TypeDescriptor.GetProperties(metaClass).Cast<PropertyDescriptor>();
        var modelClassProperties = TypeDescriptor.GetProperties(instance.GetType()).Cast<PropertyDescriptor>();

        return from metaProp in metaClassProperties
               join modelProp in modelClassProperties on metaProp.Name equals modelProp.Name
               from attribute in metaProp.Attributes.OfType<ValidationAttribute>()
               where !attribute.IsValid(modelProp.GetValue(instance))
               select new ErrorInfo(metaProp.Name, attribute.FormatErrorMessage(string.Empty), instance);
    }
}

MVC 2

التحقق من صحة في Asp.net MVC 2 بيتا 2 هو على غرار ما xVal لا.حتى إذا كنت لا بعيدا جدا في المشروع و يمكنك أن تنظر في استخدام رمز التقدم في التنمية باعتبارها الأساس الخاص بك, ربما هذا هو الطريق للذهاب بالنسبة لك.

أعتقد xVal عظيم, لقد تم استخدامه مع قلعة المصادقون وأنها تعمل تماما.مجرد التقاط RulesException كلما كنت تقوم بتشغيل التحقق من صحة إضافة الأخطاء الخاصة بك ModelState مثلا

try
{
  // execute validation runner
}
catch (RulesException ex)
{
   ex.AddModelStateErrors(ModelState, "prefix");
}

ASP.NET MVC v2 سوف أعرض الخاصة التحقق إطار.

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