2014-10-31 7 views
6

का समर्थन करने वाले सभी विचारों को ढूंढने के लिए Iterate ASP.NET MVC दृश्य I विशिष्ट दृश्य प्रकार को प्रस्तुत करने वाले सभी विचारों की एक सूची प्राप्त करना चाहते हैं।एक विशिष्ट मॉडल प्रकार

छद्म कोड:

IEnumerable GetViewsByModelType(Type modelType) 
{ 
    foreach (var view in SomeWayToGetAllViews()) 
    { 
     if (typeof(view.ModelType).IsAssignableFrom(modelType)) 
     { 
     yield return view; // This view supports the specified model type 
     } 
    } 
} 

दूसरे शब्दों में, यह देखते हुए मैं एक MyClass मॉडल है कि, मैं सभी विचारों कि यह प्रतिपादन का समर्थन करेगा प्राप्त करना चाहते हैं। अर्थात। सभी विचार जहां @ मॉडल प्रकार MyClass है, या इसकी विरासत श्रृंखला में एक प्रकार है।

+0

वैसे:

यहाँ सब उस्तरा विचारों LoginViewModel के @Model प्रकार है कि तलाश में का एक उदाहरण है? – Landeeyo

+0

एक एमवीसी-आधारित सीएमएस के लिए "वर्डप्रेस-एस्क्यू" टेम्पलेटिंग सिस्टम बनाने के लिए प्रोटोटाइप का हिस्सा जहां नए टेम्पलेट को परियोजना के अंदर आसानी से गिराया जा सकता है और रनटाइम पर हल किया जा सकता है। –

उत्तर

6

मेरे निष्कर्षों के आधार पर संकलित विचारों को असेंबली में शामिल नहीं किया गया है, इसलिए यह पार्क प्रतिबिंब में चलने वाला नहीं है।

मेरी राय में .cshtml रेज़र दृश्यों को सूचीबद्ध करने के लिए आपकी सबसे अच्छी शर्त होगी और फिर BuildManager कक्षा का उपयोग इस प्रकार संकलित करने के लिए करें, जो आपको मॉडल प्रॉपर्टी प्रकार प्राप्त करने की अनुमति देगा। - उद्देश्य क्या है

var dir = Directory.GetFiles(string.Format("{0}/Views", HostingEnvironment.ApplicationPhysicalPath), 
    "*.cshtml", SearchOption.AllDirectories); 

foreach (var file in dir) 
{ 
    var relativePath = file.Replace(HostingEnvironment.ApplicationPhysicalPath, String.Empty); 

    Type type = BuildManager.GetCompiledType(relativePath); 

    var modelProperty = type.GetProperties().FirstOrDefault(p => p.Name == "Model"); 

    if (modelProperty != null && modelProperty.PropertyType == typeof(LoginViewModel)) 
    { 
     // You got the correct type 
    } 
} 
+0

हाँ, मैं ऐसा कुछ कर रहा था। मदद के लिए धन्यवाद! –

+0

आपका स्वागत है;) –

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