डिफ़ॉल्ट मॉडेलबिन्डर एक सार्वजनिक विधि का खुलासा करता है: DefaultModelBinder.BindModel, और ओवरराइडिंग के लिए कई संरक्षित विधि उपलब्ध हैं। उनमें से सभी here सूचीबद्ध हैं।
मॉडल इसके अलावा, इन विधि वाली प्रॉपर्टी के लिए, नहीं क्षेत्रों
- GetModelProperties की तरह, देखें,
- GetFilteredModelProperties,
- GetPropertyValue,
- OnXYZValidating,
- OnXYZValidated,
- OnXYZUpdating,
- OnXYZUpdated,
- GetXYZValue,
जहां XYZ
के लिए या तो Model,
या Property/ies,
या दोनों, और इतने पर खड़ा है।
जैसा कि आप देख सकते हैं कि इन नामों के साथ कोई Fields
उल्लेख नहीं किया गया है। Darin के रूप में बताया गया है कि मॉडल के राज्य में कोई प्रत्यक्ष परिवर्तन बाइंडर द्वारा बर्दाश्त नहीं किया जाता है। इसलिए इसकी विधियों में Field
नहीं।
और साथ ही, आप एक और महत्वपूर्ण कक्षा: ModelBindingContext पर एक नज़र डालना चाहेंगे। इस वर्ग का एक उदाहरण BindModel,
और बाद में BindSimpleModel,
और BindComplexModel,
पर मॉडल प्रकार (string, int,
... के आधार पर सरल माना जाता है, सब कुछ जटिल है) को पारित किया जाता है।
तो, इस संदर्भ निम्नलिखित गुण है:
- ModelXYZ, और
- PropertyXYZ।
दूसरे शब्दों में आपके पास अपने व्यू मॉडेल में फ़ील्ड का संदर्भ देने का कोई मतलब नहीं है जबतक कि आप इन कक्षाओं को ओवरराइड नहीं करते हैं और ऐसा करने के लिए विशेष कार्यवाही करते हैं।
लेकिन फिर, ढांचे से लड़ने से सावधान रहें, इसके बजाए इसका पालन करना हमेशा आसान होता है।
संपादित करें:ModelMetadata कक्षा मॉडल को बांधने के लिए आवश्यक सभी डेटा रखती है। हालांकि, इसका कोड फ़ील्ड, फील्ड नाम इत्यादि का कोई संकेत नहीं दिखाता है। केवल गुणों का संदर्भ दिया जाता है और इसका उपयोग किया जाता है। सार्वजनिक, निजी, आदि
आशा इस इसमें से अधिकांश बताते हैं: तो, भले ही आप के वारिस और DefaultModelBinder और ModelBinderContext ओवरराइड करने के लिए प्रयास करते हैं, तो आप अभी भी नहीं fiellds तक पहुँचने के लिए, कोई बात नहीं क्या उनके उपयोग संशोधक है सक्षम हो जाएगा।
ठीक है, लेकिन इसके लिए आपके पास एक्सेस संशोधक हैं। यदि मैं नहीं चाहता कि कोई फ़ील्ड सीधे सेट किया जाए, तो मैं इसे 'निजी' घोषित करता हूं। व्यूमोडेल कक्षाएं आमतौर पर केवल डेटाकॉन्टेनर्स होती हैं और अधिकतर इसमें अधिक तर्क नहीं होता है - इसलिए मैंने सोचा कि सार्वजनिक क्षेत्रों का उपयोग करना ठीक हो सकता है। – Jan
@ जेन, सामान्य रूप से फ़ील्ड निजी होना चाहिए। –
और आमतौर पर आपको गुणों के गेटर्स में तर्क नहीं होना चाहिए ... – gdoron