यह एक पुराना सवाल था, लेकिन मौजूदा जवाब किसी भी कस्टम विशेषताओं को फेंकने के गंभीर मुद्दे को नजरअंदाज कर देते हैं जब आप मॉडल को पुन: उत्पन्न करते हैं। मैं उपलब्ध विकल्पों को कवर करने के लिए अधिक विस्तृत उत्तर जोड़ रहा हूं।
आपके पास 3 विकल्प हैं:
[DisplayName("Name goes here")]
डेटा मॉडल वर्ग में एक विशेषता जोड़ें । नकारात्मक पक्ष यह है कि जब भी आप डेटा मॉडल को पुन: उत्पन्न करते हैं तो इसे फेंक दिया जाता है।
- अपने लिए एक स्ट्रिंग पैरामीटर जोड़ें
Html.LabelFor
। उदा। @Html.LabelFor(model => model.SomekingStatus, "My New Label", new { @class = "control-label"})
संदर्भ: https://msdn.microsoft.com/en-us/library/system.web.mvc.html.labelextensions.labelfor(v=vs.118).aspx इसका नकारात्मक पक्ष यह है कि लेबल को दोहराना होगा हर दृश्य में।
- तीसरा विकल्प। डेटा वर्ग (विवरण का पालन) से जुड़ी मेटा-डेटा क्लास का उपयोग करें।
विकल्प 3 - मेटा-डेटा क्लास जोड़ें:
Microsoft मौजूदा वर्ग को संशोधित किए बिना , एक इकाई ढांचे पर गुणों को सजाने की अनुमति देता है ! मेटा-डेटा क्लासेस जो आपके डेटाबेस क्लासेस (प्रभावी रूप से आपके EF क्लास का एक बग़ल में विस्तार) से जुड़ी होती हैं। यह संबंधित वर्ग में विशेषताओं को जोड़ने की अनुमति देता है और वर्ग के लिए नहीं, इसलिए जब आप डेटा मॉडल को पुन: उत्पन्न करते हैं तो परिवर्तन नहीं खोते हैं ।
उदाहरण के लिए, यदि आपका डेटा वर्ग MyModel
किसी SomekingStatus
संपत्ति के साथ है , तो आप इसे इस तरह से कर सकते हैं:
पहले उसी नाम का एक आंशिक वर्ग घोषित करें (और उसी नामस्थान का उपयोग करके), जो आपको बिना किसी वर्ग विशेषता को जोड़ने की अनुमति देता है:
[MetadataType(typeof(MyModelMetaData))]
public partial class MyModel
{
}
सभी उत्पन्न डेटा मॉडल कक्षाएं आंशिक कक्षाएं हैं, जो आपको केवल एक ही नाम की अधिक कक्षाएं बनाकर अतिरिक्त गुणों और विधियों को जोड़ने की अनुमति देती हैं (यह बहुत आसान है और मैं अक्सर इसका उपयोग करता हूं जैसे मॉडल में अन्य फ़ील्ड प्रकारों के स्वरूपित स्ट्रिंग संस्करण प्रदान करने के लिए )।
चरण 2: अपने नए आंशिक वर्ग द्वारा संदर्भित मेटाडेटा वर्ग जोड़ें:
public class MyModelMetaData
{
[DisplayName("My New Label")]
public string SomekingStatus;
}
संदर्भ: https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute(v=vs.110).aspx
टिप्पणियाँ:
- स्मृति से, यदि आप मेटाडेटा वर्ग का उपयोग करना शुरू करते हैं, तो यह वास्तविक वर्ग (
[required]
आदि) पर मौजूदा विशेषताओं को अनदेखा कर सकता है, इसलिए आपको मेटा-डेटा वर्ग में उन लोगों की नकल करने की आवश्यकता हो सकती है।
- यह जादू से संचालित नहीं होता है और यह किसी भी वर्ग के साथ काम नहीं करेगा। यूआई सजावट विशेषताओं के लिए दिखने वाला कोड पहले मेटा-डेटा वर्ग की तलाश के लिए बनाया गया है।