2015-09-27 12 views
6

का उपयोग कर किसी भी संपत्ति के लिए नियंत्रक में [प्रदर्शन (नाम = "")] विशेषता में मूल्य कैसे प्राप्त करें मैं एक एमवीसी 5 अनुप्रयोग विकसित कर रहा हूं। मैं [प्रदर्शन (नाम = "")] किसी भी वर्ग की किसी भी संपत्ति के लिए मेरे नियंत्रक विधि में विशेषता प्राप्त करना चाहता हूं।ईएफ 6

मेरे मॉडल है के रूप में:

public partial class ABC 
{ 
    [Required] 
    [Display(Name = "Transaction No")] 
    public string S1 { get; set; } 
} 

मैं answer to this question ध्यान दिया है, लेकिन यह एक छोटे से लंबा प्रक्रिया है। मैं कुछ आसानी से उपलब्ध और अंतर्निहित कुछ ढूंढ रहा हूं।

तो, मैं इस कोशिश की है:

MemberInfo property = typeof(ABC).GetProperty(s); // s is a string type which has the property name ... in this case it is S1 
var dd = property.CustomAttributes.Select(x => x.NamedArguments.Select(y => y.TypedValue.Value)).OfType<System.ComponentModel.DataAnnotations.DisplayAttribute>(); 

लेकिन मैं 2 समस्या है, सबसे पहले मैं मूल्य अर्थात "लेन-देन नहीं" नहीं मिल रहा है। और दूसरी बात यह है कि मैंने का उल्लेख किया है। ओएफटी टाइप <> मुझे अभी भी सभी विशेषताओं को प्राप्त हो रहा है [प्रदर्शन (नाम = "")] और [आवश्यक]।

लेकिन सौभाग्य से मैं "लेन-देन नहीं"

संपत्ति में >> CustomAttribute मूल्य मिल रहा है >> [1] >> NamedArguments >> [0] >> TypedValue >> मूल्य = "लेन-देन नहीं "

के बाद से TypedValue.Value आवश्यक महत्व है, इसलिए मैं यह कैसे प्राप्त कर सकते हैं?

उत्तर

11

यह काम करना चाहिए:

MemberInfo property = typeof(ABC).GetProperty(s); 
var dd = property.GetCustomAttribute(typeof(DisplayAttribute)) as DisplayAttribute; 
if(dd != null) 
{ 
    var name = dd.Name; 
} 
+0

धन्यवाद .. यह मेरे लिए काम करता है .. ** टाइपऑफ (एबीसी) ** // या मॉडल जिसके लिए संपत्ति की आवश्यकता है –

+0

मैंने कोशिश की लेकिन मूल्य संपत्ति को पास नहीं किया गया है। मैंने अपने मॉडल के मूल्य के साथ एस को बदलने की कोशिश की। लेकिन जब मैं memberinfo संपत्ति पर होवर करता हूं .... संपत्ति शून्य है। यह क्यों है? मुझे नहीं पता कि यह क्यों है क्योंकि मेरा मॉडल मूल्य enum है? मेरे द्वारा यह कैसे किया जा सकता है? यह मेरी लाइन है: टाइपऑफ (MyProject.Dom.Title) .GetProperty (Card.Title.ToString()) – Nurul

+1

@ नूरुल, टिप्पणी "यहां मेरा कोड है, यह क्यों काम नहीं करता है" जैसे प्रश्न पूछने का एक स्थान नहीं है। । कृपया इसे एक अलग प्रश्न के रूप में पोस्ट करें, और अपना कोड शामिल करें। –

0

एलेक्स कला का जवाब लगभग मेरे लिए काम किया। dd.Name ने बस संपत्ति का नाम वापस कर दिया, लेकिन dd.GetName() ने पाठ को Display विशेषता से वापस कर दिया।

+0

क्या आपने सी # 6 का नाम() ऑपरेटर का प्रयास किया है? –

+0

@ कुनल मुखर्जी ने बस कोशिश की कि यह संपत्ति का नाम भी लौटाए, न कि 'प्रदर्शन' विशेषता से टेक्स्ट। –

संबंधित मुद्दे