2011-05-02 7 views
9

मेरे पास एक रेजर एमवीसी 3 प्रोजेक्ट है जिसमें एक फॉर्म में दो उपयोगकर्ता रिकॉर्ड हैं, एक मुख्य संपर्क के लिए और एक बैकअप संपर्क के लिए। उदाहरण के लिए;मैं एमवीसी 3 में एक ही ऑब्जेक्ट के उदाहरणों के लिए एक अलग आवश्यक संदेश कैसे दिखा सकता हूं?

public class User 
{ 
    [Required(ErrorMessage = "First name is required")] 
    public string FirstName { get; set; } 
} 

मान्यकरण सब अच्छी तरह से छोटे मुद्दे जहाँ उपयोगकर्ता एक क्षेत्र को भरने के लिए विफल रहता है के लिए छोड़कर काम करता है, यह कहते हैं, 'नाम आवश्यक है' लेकिन मैं उपयोगकर्ता ओर आकर्षित करना चाहूँगा जो करने के लिए पहले नाम से एक फ़ील्ड गुम है जैसे 'बैकअप संपर्क पहला नाम आवश्यक है' या 'मुख्य संपर्क पहला नाम आवश्यक है'।

आदर्श रूप में मैं कक्षा में [आवश्यक] एनोटेशन छोड़ना चाहता हूं क्योंकि इसे कहीं और उपयोग किया जाता है।

यह उन छोटे मामलों में से एक जैसा लगता है जो शायद याद किया गया हो और आसानी से हासिल नहीं किया जा सकता है, लेकिन कृपया मुझे गलत साबित करें।

रयान

+0

आप हमेशा वास्तविक त्रुटि संदेश का प्रतिनिधि दे सकते हैं, और केवल आवश्यक विशेषता को रख सकते हैं। फिर कार्रवाई को सही त्रुटि संदेश का चयन करने की आवश्यकता होगी। – bzlm

उत्तर

17

एक तरह से आप ऐसा कर सकते हैं सभी त्रुटि संदेश के साथ एक एकल उपयोगकर्ता मॉडल इस स्क्रीन के लिए एक अलग दृश्य मॉडल, बजाय के साथ है। नए दृश्य मॉडल में, आपके पास बैकअप कंटैक्ट फर्स्टनाम संपत्ति, कीकंटैक्ट फर्स्टनाम संपत्ति, आदि प्रत्येक अलग त्रुटि संदेश के साथ हो सकती है। (वैकल्पिक रूप से इस दृश्य मॉडल में अलग-अलग उपयोगकर्ता मॉडल गुणों के रूप में हो सकते हैं, लेकिन मुझे पता चला है कि माइक्रोसॉफ्ट का क्लाइंट सत्यापन जटिल मॉडल के साथ अच्छा नहीं खेलता है और फ्लैट गुणों को पसंद करता है)।

आपका दृश्य मॉडल इस प्रकार दिखाई देगा:

public class MySpecialScreenViewModel 
{ 
    [Required(ErrorMessage = "Backup contact first name is required")] 
    public string BackupContactFirstName { get; set; } 


    [Required(ErrorMessage = "Key contact first name is required")] 
    public string KeyContactFirstName { get; set; } 
} 

तो इस तरह देखने के लिए अपने दृश्य मॉडल पारित:

@model MySpecialScreenViewModel 
... 

आपका पोस्ट नियंत्रक कार्रवाई दृश्य मॉडल से गुण (इकट्ठा होगा या उन्हें उपयोगकर्ता मॉडल को अलग करने के लिए मानचित्र करें) और उन्हें उचित डेटा प्रोसेसिंग विधियों तक पास करें।

+0

यह "रास्ता" है :) आपका दृश्य मॉडल फॉर्म से मेल खाना चाहिए। किसी भी abstractions अभी ठीक से संभाला नहीं है। संपादक के लिए उनके धक्का को देखते हुए और संपादक टेम्पलेट्स, हालांकि, आगे बढ़ने वाले जटिल प्रकारों के सत्यापन में एमएस निवेश को और अधिक देखना अच्छा लगेगा। –

1

एक विकल्प जो मैंने ठोकर खाया है, बस मॉडलस्टेट संग्रह को संशोधित करें। इसमें इंडेक्स द्वारा नामित संग्रह में तत्व होंगे, जैसे 'User_0__EmailAddress' और आप उस कुंजी से जुड़े त्रुटियों के संग्रह को समायोजित/संशोधित/प्रतिस्थापित कर सकते हैं।

0
[Required(ErrorMessage = "{0} is required")] 

{0} DisplayName स्वचालित रूप से इसे पर रखा गया है =

नमूना

[DisplayName("Amount per square meter")] 
[Required(ErrorMessage = "{0} is required")] 
public int PriceMeter { get; set; } 

उत्पादन

प्रति वर्ग मीटर की राशि की आवश्यकता है

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

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