यह कैसे है कि मैं नियंत्रक में एक विधि बना सकता हूं और केवल कुछ तर्क डाल सकता हूं और फ़ॉर्म सबमिट करने के बाद इसे समझता हूं? हुड के तहत, यह सही तरीका कैसे ढूंढता है और यह कैसे पता लगाता है कि मैं केवल उन तर्कों को चाहता हूं?एएसपीनेट एमवीसी इसे कैसे समझता है?
उत्तर
संक्षेप में:
मार्ग इंजन HttpRequest संभालती है, और अनुरोध किया गया URL की जाँच करता है। जब यह पहला मार्ग मिलान पाता है, तो यह
MvcRouteHandler
का एक नया उदाहरण बनाता है और इसे रूटवेल्यू डिक्शनरी में यूआरएल के टूटा हुआ टोकन पास करता है।मार्ग के
MvcRouteHandler
अनुरोध लेता है, और एक नियंत्रक वर्ग उदाहरण का दृष्टांत की कोशिश करता है। सम्मेलन से, यह "XXXXXXController" नामक एक वर्ग की तलाश करता है, जहां एक्स को रूट में {नियंत्रक} पैरामीटर द्वारा प्रतिस्थापित किया जाता है।एक बार जब यह नियंत्रक पाता है, यह उस पर उचित विधि, मार्ग की {कार्रवाई} पैरामीटर द्वारा दिए गए आह्वान। किसी भी नामित तर्क, जैसे {id}, जो रूट में मौजूद हैं, विधि के पैरामीटर के रूप में पास किए जाते हैं।
मूल रूप से, एएसपी.NET एमवीसी "जानता है" सब कुछ मार्ग जानकारी से आता है। यह पतली हवा से पैरामीटर को दिव्य नहीं कर सकता - उन्हें मार्ग पार्सिंग से आना होगा। अगर अनुरोध अनुरोधित यूआरएल में मौजूद नहीं है, तो इसे विधि में पारित नहीं किया जा सकता है।
यह भी ध्यान दिया जाना चाहिए कि आप अपने मार्गों बनाकर ढांचे के व्यवहार को ओवरराइड कर सकते हैं MvcRouteHandler
के बजाय वैकल्पिक संचालकों का उपयोग करें। ढांचा काफी विस्तार योग्य है, इसलिए आप कई बिंदुओं पर कस्टम कार्यक्षमता में प्लग कर सकते हैं।
वहाँ नियंत्रक, कार्रवाई और देखने संकल्प है, साथ ही ModelBinders के लिए खेलने में कोड की काफ़ी है। फ्रेमवर्क के विशिष्ट हिस्सों को देखने के लिए शायद यह सबसे अच्छा होगा और अधिक जवाब पाने के लिए एक और विस्तृत प्रश्न पूछें।
सौभाग्य से, ASP.NET MVC framework has been open-sourced, इसलिए यदि आप उत्सुक हैं कि यह सब कैसे काम करता है, तो आप get the code कर सकते हैं और इसे स्वयं देख सकते हैं। इसके पढ़ने के लिए उत्कृष्ट कोड और आप कुछ सीखना सुनिश्चित कर रहे हैं।
हालांकि, आपके प्रश्न के बिंदु पर, आपको सिस्टम.Web.Mvc.MvcHandler और System.Web.Mvc.ControllerActionInvoker कक्षाओं को देखना चाहिए, जो आपको अपने प्रश्नों के उत्तर देने के लिए सही पथ का नेतृत्व करना चाहिए।
मार्ग या फॉर्म फ़ील्ड संग्रह से। – GalacticCowboy
फॉर्म फ़ील्ड संग्रह अनुरोध के साथ आता है, लेकिन इससे प्रभावित नहीं होता है कि एएसपी.NET एमवीसी चीजों को कैसे समझता है। फ़ॉर्म किसी दिए गए यूआरएल पर पोस्ट किया जाता है (आमतौर पर उसी नियंत्रक को जो दृश्य उत्पन्न करता है), और वह यूआरएल रूटिंग इंजन द्वारा संभाला जाता है। – womp