2010-06-27 5 views
14

काम नहीं करता है मैं काम करने के लिए एक इकाई फ्रेमवर्क स्ट्रिंग प्रॉपर्टी के सर्वर-साइड सत्यापन प्राप्त करने का प्रयास कर रहा हूं। अन्य सर्वर-साइड सत्यापन जैसे डेटा प्रकार सत्यापन और आवश्यक दिनांक टाइम और न्यूमेरिक ईएफ गुण काम कर रहे हैं।एमवीसी 2 इकाई फ्रेमवर्क 4 में एक आवश्यक स्ट्रिंग प्रॉपर्टी का सर्वर-साइड सत्यापन

यह वीएस 2010 में, नेट 4.0, एमवीसी 2 + क्लाउड, एडीओ.Net इकाई फ्रेमवर्क।

स्ट्रिंग प्रॉपर्टी जिसमें मुझे समस्याएं हैं, उन्हें SQL 2008, वर्चर (50) गैर-शून्य कॉलम में मैप किया गया है।

जब मैं इस संपत्ति के लिए खाली स्ट्रिंग के साथ अपनी क्रिया बनाने के लिए पोस्ट करने का प्रयास करता हूं, तो मुझे follwing त्रुटि मिलती है।

अपवाद विवरण: System.Data.ConstraintException: यह गुण शून्य मान पर सेट नहीं किया जा सकता है।

जब मैं रिक्त स्थान के साथ कार्रवाई में पोस्ट करता हूं, तो मुझे सफलतापूर्वक एक आवश्यक फ़ील्ड सत्यापन संदेश मिलता है।

मैंने डेटा एनोटेशन और क्लाइंटसाइड वैलिडेशन का उपयोग करने का प्रयास किया है, लेकिन आंशिक विचारों और jquery संवादों पर काम कर रहे क्लाइंटसाइड सत्यापन के साथ समस्याएं प्रतीत होती हैं।

यहां इकाई ढांचे से मूल स्वत: उत्पन्न कोड है।

[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)] 
[DataMemberAttribute()] 
public global::System.String GradeTypeName 
{ 
    get 
    { 
     return GradeTypeName; 
    } 
    set 
    { 
     OnGradeTypeNameChanging(value); 
     ReportPropertyChanging("GradeTypeName"); 
     _GradeTypeName = StructuralObject.SetValidValue(value, false); 
     ReportPropertyChanged("GradeTypeName"); 
     OnGradeTypeNameChanged(); 
    } 
} 

कार्रवाई विधि (बनाने या संपादित) के हस्ताक्षर के आधार पर, अपवाद विधि में या विधि जब UpdateModel() कहा जाता है के भीतर कदम से पहले हो सकता है। आंतरिक अपवाद model.designer.cs फ़ाइल से नीचे की रेखा पर है।

_GradeTypeName = StructuralObject.SetValidValue(value, false); 

मैं इसे एक साधारण एमवीसी 2 वेब एप्लिकेशन पर पुन: उत्पन्न करने में सक्षम हूं।

उत्तर

28

मुझे थोड़ी देर के लिए एक ही समस्या हो रही थी। मुझे यहां स्पष्टीकरण का एक टुकड़ा मिला है: http://mvcmusicstore.codeplex.com/workitem/6604। संक्षेप में इसे रखने के लिए, अपवाद "सिस्टम। डेटा। कॉन्स्ट्रेनट अपवाद: इस संपत्ति को शून्य मान पर सेट नहीं किया जा सकता है" एंटिटी के प्रॉपर्टी सत्यापन द्वारा फेंक दिया गया है। यह सत्यापन तब किया जाता है जब आपका एमवीसी अनुप्रयोग फॉर्म फ़ील्ड को संबंधित इकाई गुण में बांधने का प्रयास करता है (इसे प्रीबाइंडिंग प्रमाणीकरण कहा जाता है, और यह फ़ॉर्म सबमिट करते समय होता है)। चूंकि क्षेत्र खाली है (इसलिए शून्य में परिवर्तित करें), बाइंडर संपत्ति के लिए एक शून्य मूल्य बांधने की कोशिश करता है, जो आपकी इकाई की संपत्ति पर गैर-शून्य बाधा का उल्लंघन करता है।

लेकिन यदि आप रिक्त फ़ील्ड के साथ पोस्ट करते हैं (जो खाली से अलग है, इसलिए शून्य) इकाई सत्यापन सत्यापन (क्योंकि संपत्ति अब शून्य मान पर सेट नहीं है), और फिर आप "आवश्यक" से संदेश देखते हैं एनोटेशन सत्यापन, जो प्रीबाइंडिंग के बाद किया जाता है (यह पोस्टबाइंडिंग सत्यापन) है।

का संभावित हल का उपयोग करने के एनोटेशन [DisplayFormat (ConvertEmptyStringToNull = false)] कि बांधने की मशीन के लिए कहता है शून्य पर एक खाली स्ट्रिंग परिवर्तित करने के लिए नहीं है।

[Required] 
    [DisplayFormat(ConvertEmptyStringToNull = false)] 
    public string YourStringProperty { get; set;} 

आशा है, इससे मदद मिलती है!

+0

धन्यवाद! जब तक मुझे आपकी पोस्ट नहीं मिली तब तक यह मेरे लिए एक समस्या थी। – jrob

+0

नहीं, समस्या! मुझे खुशी है कि इससे मदद मिली है! – tinesoft

+0

+1 बहुत अच्छे उत्तर के लिए +1 (लिंक, आसवित सलाह) –

4

यह बहुत उपयोगी था। मैं एमवीसी 3 और इकाई ढांचे का उपयोग कर रहा हूँ।मैं सीधे अपनी नियंत्रकों को नियंत्रक में पास कर रहा था, लेकिन जब फॉर्म खाली था तो वही त्रुटि मिली। इकाई ढांचे के साथ आप ऑटो-जेनरेट कोड को संपादित करके डेटा सत्यापन कर सकते हैं, लेकिन इकाई के एक अलग आंशिक वर्ग को मेरे लिए बेहतर काम किया।

[MetadataType(typeof(TestEntityValidation))] 
public partial class TestEntity{ 
} 

public class TestEntityValidation{ 
    [Required] 
    [DisplayFormat(ConvertEmptyStringToNull = false)] 
    public String name { get;set} 
} 
2

कभी कभी एफई में डेटाबेस पहले दृष्टिकोण में, आप अपने स्तंभ not null से अद्यतन कर सकते हैं SQL क्वेरी का उपयोग कर null हो सकता है और उपयोग कर सकते हैं करने के लिए 'डेटाबेस से अद्यतन मॉडल ...' (edmx राइट क्लिक में) तो शायद की संपत्ति उस इकाई को ठीक से अपडेट नहीं किया गया है और इसलिए यदि आपके पास उस कॉलम में null डेटा है, मैपिंग में, उल्लंघन होता है और यह त्रुटि दिखाई देती है।

इस को ठीक करने के लिए; आप उस इकाई की उस संपत्ति की गुणों में Nullable देख सकते हैं जिसे आपने अपडेट किया था।

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