ASP.NET MVC modelmetatata: هل هناك طريقة لتعيين isrequired بناء على المطلوبة؟

StackOverflow https://stackoverflow.com/questions/1662442

سؤال

نشر براد ويلسون سلسلة مدونة رائعة على ModelmetAdata الجديدة ASP.NET MVC:http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-2-modelmetadata.html

في ذلك، يصف كيف تتعرض فئة modelmetadata الآن في وجهات النظر والمساعدين القالبين. ما أود القيام به هو عرض علامة النجمة بجانب تسمية حقل النموذج إذا كان الحقل مطلوبا، لذلك فكرت في استخدام خاصية isrequired من modelmetadata. ومع ذلك، isepredquired افتراضيا صحيحا بالنسبة لجميع الخصائص غير القابلةly، في حين أنها خاطئة لجميع الخصائص غير القابلةly. المشكلة هي أن السلاسل دائما لا تكون دائما، وبالتالي فإن خاصية isrequired هي دائما خطأ في السلاسل. هل يعرف أحد كيفية تجاوز الافتراضي الخاص بكيف تم تعيين isrequired؟ بدلا من ذلك، فكرت في الاستفادة من السمة المطلوبة التي قمت بتزيين خصائصي معها، ولكن يبدو أن المطلوبة يتعرض للتعرض من خلال فئة ModelMetAdata. هل يعرف أحد كيفية التجول في هذه المشكلة؟

شكرا مقدما.

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

المحلول

تحتاج إلى إنشاء ModelmetAdApRovider الخاصة بك. فيما يلي مثال باستخدام Dataannotationsmodelbinder

public class MyMetadataProvider : DataAnnotationsModelMetadataProvider
{
        protected override ModelMetadata CreateMetadata(Collections.Generic.IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
        {
            var _default = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
            _default.IsRequired = attributes.Where(x => x is RequiredAttribute).Count() > 0;
            return _default;
        }
}

ثم في AppStartup الخاص بك في Global.asax، سوف ترغب في وضع ما يلي في HymetAdATaprovider كوفر بيانات التعريف الافتراضي:

ModelMetadataProviders.Current = new MyMetadataProvider();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top