2015-05-21 6 views
8

मैं एक बड़ी संख्या में डेटा टेबल के साथ एक परियोजना पर काम कर रहा हूं और उन्हें एएसपीनेट एमवीसी स्क्रीन के माध्यम से प्रदर्शित कर रहा हूं।ऊंट केस फ़ील्ड नामों से डेटा एनोटेशन स्वचालित रूप से उत्पन्न करना

मैं अपने आप को इस तरह सरल डेटा एनोटेशन का एक बहुत लिख पाते हैं:

[Display(Name = "Manager Name")] 
public string ManagerName { get; set; } 

[Display(Name = "Employee Name")] 
public string EmployeeName { get; set; } 

[Display(Name = "Employee No")] 
public string EmployeeNo { get; set; } 

[Display(Name = "Manager Employee No")] 
public string ManagerEmployeeNo { get; set; } 

यह काफी थकाऊ हो रही है और सोच रहा था अगर वहाँ एक तरीका है कि मैं या तो एक नई विशेषता जोड़ सकते हैं कि "convertFromCamel" का कहना है (या कुछ और) या वहाँ

@Html.DisplayNameFor(m => Model.First().EmployeeNo) 

ओवरराइड करने के लिए एक रास्ता है तो कोई डेटा एनोटेशन यह ऊंट मामले से मौजूदा फ़ील्ड नाम परिवर्तित करता है कि। अग्रिम

+2

इसकी नहीं एक डेटा एनोटेशन आप की जरूरत है अपने एक कस्टम DataAnnotationsModelMetadataProvider जहां:

using System; using System.ComponentModel; using System.Text.RegularExpressions; using System.Web.Mvc; namespace MyProject.Whatever { public class CustomDataAnnotationsModelMetadataProvider : DataAnnotationsModelMetadataProvider { protected override ModelMetadata GetMetadataForProperty(Func<object> modelAccessor, Type containerType, PropertyDescriptor propertyDescriptor) { ModelMetadata metadata = base.GetMetadataForProperty(modelAccessor, containerType, propertyDescriptor); if (metadata.DisplayName == null) { metadata.DisplayName = SplitCamelCase(metadata.GetDisplayName()); } return metadata; } private string SplitCamelCase(string str) { return Regex.Replace( Regex.Replace( str, @"(\P{Ll})(\P{Ll}\p{Ll})", "$1 $2" ), @"(\p{Ll})(\P{Ll})", "$1 $2" ); } } } 

अब डिफ़ॉल्ट DataAnnotationsModelMetadataProvider अपने Global.asax.cs फ़ाइल में निम्न कार्य करके ओवरराइड आप ModelMetatdata को सेट करने के लिए 'CreateMetadata() 'को ओवरराइड करते हैं। DisplayName गुण –

उत्तर

9

में

धन्यवाद जानकारी ब्लॉग here पर पाया का एक संयोजन का उपयोग करना, और उत्कृष्ट ऊंट-केस विभाजन regex here, मैं इस बाहर काम करने में सक्षम था। अवधारणा यह है कि आप डिफ़ॉल्ट DataAnnotationsModelMetadataProvider का एक कस्टम स्वाद बनाते हैं। ऐसे मामले में जहां किसी संपत्ति के पास पहले से डिस्प्ले नाम नहीं है, यह कस्टम प्रदाता आपके लिए (रिक्त स्थान के साथ) बनाता है और बनाता है।

सबसे पहले, एक वर्ग बनाने के लिए:

protected void Application_Start() 
{ 
    //Other stuff. 
    ... 
    ModelMetadataProviders.Current = new CustomDataAnnotationsModelMetadataProvider(); 
} 
+0

धन्यवाद जेमी। मैं इसे अगले दिन या तो कोशिश करूंगा। चीयर्स – Lobsterpants

+0

@ क्रिस - कोई समस्या नहीं, उम्मीद है कि यह आपके लिए काम करेगी। मुझे बताएं कि आप किस प्रकार से आगे बढ़ेंगे। इस के लिए धन्यवाद, लेकिन मैं –

+0

परोक्ष 'System.Web.Mvc.ModelMetadataProvider' – Lobsterpants

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