2012-07-18 11 views
9

मुझे किसी प्रकार का डेटा निर्यात करने की आवश्यकता है (फ़ाइल बनाएं), इसलिए डेटा को दृश्यों द्वारा प्रस्तुत नहीं किया जाएगा (शुद्ध प्रस्तुत किया जाएगा) लेकिन शुद्ध सी # कोड द्वारा, एक दृश्य को देखें। लेकिन मुझे कुछ मॉडलमैटाडाटा सूचनाओं की आवश्यकता है।दृश्य संदर्भ के बाहर ModelMetadata कैसे प्राप्त करें?

मैं पूछता हूं कि यूनिट परीक्षणों के अंदर मॉडलमैटाडाटा कैसे बनाया जाए, साथ ही, दृश्यों के बाहर भी?

+1

आपके डोमेन मॉडल बनाएँ और अपने नियंत्रक के माध्यम से यह हेरफेर। मुझे यकीन नहीं है कि आप क्या पूछ रहे हैं क्या आप और स्पष्ट होने की कोशिश कर सकते हैं? – Grixxly

+0

डारिन (नीचे) का उत्तर मुझे जो चाहिए वह बहुत करीब है, लेकिन मैं एक विशिष्ट प्रकार के लिए "जेनेरिक परम" द्वारा संकलित FromLambdaExpression() को कॉल नहीं कर सकता। मैं केवल रनटाइम (गतिशील रूप से) में टाइप निर्धारित कर सकता हूं। – Luciano

उत्तर

17

मान लिया जाये कि आप कुछ मेटाडाटा के साथ एक दृश्य मॉडल है:

public class MyViewModel 
{ 
    [DisplayName("Bar")] 
    public string Foo { get; set; } 
} 

आप इस तरह इस मेटाडाटा को पुनः प्राप्त कर सकते हैं:

ModelMetadata metadata = ModelMetadata.FromLambdaExpression<MyViewModel, string>(
    x => x.Foo, 
    new ViewDataDictionary<MyViewModel>() 
); 

Assert.AreEqual("Bar", metadata.DisplayName); 

अद्यतन:

के रूप में टिप्पणी में अनुरोध किया अनुभाग यहां मेटाडेटा प्राप्त करने का तरीका है यदि केवल रनटाइम पर ही जाना जाता है:

var type = typeof(MyViewModel); 
var metadata = ModelMetadataProviders.Current.GetMetadataForType(null, type); 

और आप एक बच्चे संपत्ति के लिए मेटाडाटा प्राप्त करना चाहते हैं, तो बस गुण का नाम निर्दिष्ट:

var type = typeof(MyViewModel); 
var metadata = ModelMetadataProviders.Current.GetMetadataForProperty(null, type, "Foo"); 
+0

दुर्भाग्य से मैं केवल रनटाइम में टाइप निर्धारित कर सकता हूं। FromLambdaExpression() को केवल एक टाइप क्लास रखने के लिए एक तरीका है, शायद मैन्युअल रूप से एक अभिव्यक्ति बनाना? – Luciano

+0

@ लुइसियानो, मेरा अपडेट देखें। –

+0

अच्छा! बहुत धन्यवाद ! – Luciano

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