2012-11-27 10 views
5

मैं की तरह एक दिनांक स्वरूप मिला: अबविन्यास DisplayFormat बनाने के लिए विशेषता

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 
public DateTime? CreatedOn { get; set; } 

, मैं अपने आवेदन एक config फ़ाइल से पढ़ने में हर datetime प्रारूप बनाना चाहते हैं। जैसे:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = SomeClass.GetDateFormat())] 
public DateTime? CreatedOn { get; set; } 

लेकिन यह संकलित नहीं होगा।

मैं यह कैसे कर सकता हूं?

उत्तर

7

समस्या इस के साथ नेट केवल आप विशेषताओं में संकलन समय स्थिरांक रखने की अनुमति देता है। एक अन्य विकल्प है, तो जैसे DisplayFormatAttribute से विरासत और निर्माता में प्रदर्शन स्वरूप देखने के लिए है:

SomeClass.cs

public class SomeClass 
{ 
    public static string GetDateFormat() 
    { 
     // return date format here 
    } 
} 

DynamicDisplayFormatAttribute.cs

public class DynamicDisplayFormatAttribute : DisplayFormatAttribute 
{ 
    public DynamicDisplayFormatAttribute() 
    { 
     DataFormatString = SomeClass.GetDateFormat(); 
    } 
} 

तो आप कर सकते हैं इसका उपयोग इस प्रकार करें:

[DynamicDisplayFormat(ApplyFormatInEditMode = true)] 
public DateTime? CreatedOn { get; set; } 
0

मैंने बेस क्लास में एक स्ट्रिंग स्थिर बनाया और मेरे दृश्य मॉडल को उप-वर्गीकृत किया ताकि मैं इसका उपयोग कर सकूं।

उदाहरण के लिए:

public class BaseViewModel : IViewModel 
{ 
    internal const string DateFormat = "dd MMM yyyy"; 
} 

public class MyViewModel : BaseViewModel 
{ 
    [DisplayFormat(ApplyFormatInEditMode = true, 
        DataFormatString = "{0:" + DateFormat + "}")] 
    public DateTime? CreatedOn { get; set; } 
} 

इस तरह से मैं भी उपवर्गीकरण साथ इसे संदर्भ सकता है:

public class AnotherViewModel 
{ 
    [DisplayFormat(ApplyFormatInEditMode = true, 
        DataFormatString = "{0:" + BaseViewModel.DateFormat + "}")] 
    public DateTime? CreatedOn { get; set; } 
} 
संबंधित मुद्दे