c# किसी संपत्ति के लिए[आवश्यक] और अशक्त होने का क्या मतलब है?




asp.net-mvc data-annotations (4)

किसी संपत्ति के लिए [Required] और अशक्त होने का क्या मतलब है? (नीचे उदाहरण) ऐसा लगता है कि अगर यह [Required] यह संभवतः null (कोई मूल्य) नहीं हो सकता है, और यदि यह null होने में सक्षम है तो यह संभवतः [Required] नहीं हो सकता है।

[Required]
public DateTime? OrderDate { get; set; }

यह 0001-01-01T00:00:00 , इसलिए यह प्रपत्र 0001-01-01T00:00:00 जैसे प्रारंभिक मूल्य को प्रदर्शित नहीं करता है जिसका कोई अर्थ नहीं है।

उपयोगकर्ता को कुछ दर्ज करने के लिए मजबूर करना आवश्यक है।


आवश्यक दृश्य के लिए एक डेटा एनोटेशन है। फॉर्म पोस्ट को स्वीकार करने से पहले देखने के लिए इसे एक मूल्य की आवश्यकता होगी।

यह मान अशक्त है जो डेटाबेस में अनुमत है। डेटाबेस में एक मान शून्य हो सकता है, या मान शून्य के रूप में जारी रखा जा सकता है।

वे अलग पहलू हैं।


एक संपत्ति को अशक्त बनाने और [Required] विशेषता के साथ चिह्नित करने का कारण अंडर-पोस्टिंग हमलों से रक्षा करना है। यह आपको संपत्ति के लिए डिफ़ॉल्ट मूल्य के बजाय दृश्य में एक प्रारंभिक खाली मान प्रदर्शित करने की अनुमति देता है। यह आमतौर पर देखने के मॉडल में मूल्य प्रकार के गुणों के साथ किया जाता है।

एक अंडर-पोस्टिंग हमला वह है जहां एक दुर्भावनापूर्ण उपयोगकर्ता अनुरोध में संपत्ति के लिए एक मूल्य छोड़ने का अनुरोध संशोधित करता है। यदि संपत्ति DateTime (शून्य नहीं) थी, तो DefaultModelBinder अपने डिफ़ॉल्ट ( 01/01/0001 ) मूल्य को इनिशियलाइज़ करेगा और कोई ModelState त्रुटि उत्पन्न नहीं होगी। नतीजतन, उस मूल्य को तब भी बचाया जा सकता है, भले ही इसकी उम्मीद न हो।

यदि संपत्ति DateTime? (शून्य) सुरक्षित रहो।

ASP.NET MVC में ब्रैड विल्सन के लेख इनपुट सत्यापन बनाम मॉडल सत्यापन का संदर्भ लें और "अंडर-पोस्टिंग" समस्या शीर्षक अनुभाग।


यह क्लाइंट सत्यापन के लिए required लेकिन DB मैपिंग के लिए nullable





data-annotations