मेरे पास ऐसे क्षेत्र हैं जो विभिन्न लोगों को अलग-अलग नामों में देखना चाहिए।क्या मैं एक ही क्षेत्र में कई बार IMetadataAware विशेषता का उपयोग कर सकता हूं?
उदाहरण के लिए, मैं निम्नलिखित उपयोगकर्ता प्रकार है लगता है:
[AttributeUsage(AttributeTargets.Property, AllowMultiple = true)]
public class DisplayForUserTypeAttribute : Attribute, IMetadataAware
{
private readonly UserType _userType;
public DisplayForUserTypeAttribute(UserType userType)
{
_userType = userType;
}
public string Name { get; set; }
public void OnMetadataCreated(ModelMetadata metadata)
{
if (CurrentContext.UserType != _userType)
return;
metadata.DisplayName = Name;
}
}
विचार यह है कि मैं अन्य मूल्यों के रूप में की जरूरत ओवरराइड कर सकते हैं, लेकिन वापस आते हैं:
public enum UserType {Expert, Normal, Guest}
मैं एक IMetadataAware
विशेषता कार्यान्वित डिफ़ॉल्ट मानों पर जब मैं नहीं करता हूं। उदाहरण के लिए:
public class Model
{
[Display(Name = "Age")]
[DisplayForUserType(UserType.Guest, Name = "Age (in years, round down)")]
public string Age { get; set; }
[Display(Name = "Address")]
[DisplayForUserType(UserType.Expert, Name = "ADR")]
[DisplayForUserType(UserType.Normal, Name = "The Address")]
[DisplayForUserType(UserType.Guest, Name = "This is an Address")]
public string Address { get; set; }
}
समस्या यह है कि जब मैं एक ही प्रकार के अनेक विशेषताएं है, DataAnnotationsModelMetadataProvider
केवल चलाता है पहले एक के लिए OnMetadataCreated
है।
उपर्युक्त उदाहरण में, Address
केवल "पता" या "एडीआर" के रूप में दिखाया जा सकता है - अन्य विशेषताओं को कभी निष्पादित नहीं किया जाता है।
यदि मैं विभिन्न विशेषताओं - DisplayForUserType
, DisplayForUserType2
, DisplayForUserType3
का उपयोग करने का प्रयास करता हूं, तो सब कुछ अपेक्षित काम कर रहा है।
क्या मैं यहां कुछ भी गलत कर रहा हूं?
मुझे 'TypeId' के बारे में पता नहीं था। यदि कोई दिलचस्पी लेता है तो यहां एक अच्छा स्पष्टीकरण दिया गया है: [क्या दो विशेषताओं के टाइप आईडी जो अर्थात् समान हैं समान या समान हैं?] (Http://stackoverflow.com/q/8728793/7586) बहुत बहुत धन्यवाद, और (देर हो चुकी है) ढेर ओवरफ्लो में आपका स्वागत है! – Kobi
कोई चिंता नहीं, खुशी है कि मैं मदद कर सकता हूं - भले ही यह एक साल देर हो :-) –
CurrentConte3xt अब और उपलब्ध नहीं है। क्या एमवीसी 5 और उच्चतर में कुछ हासिल करना संभव है? –