ASP.NET MVC 2 ढांचे की अंतिम रिलीज के चार महीने से अधिक समय बाद, विकास टीम
ASP.NET MVC 3 के पहले प्रारंभिक संस्करण को प्रस्तुत करने की कृपा कर रही है। घोषणा और डाउनलोड लिंक
यहां पाया जा सकता है ।
यह आलेख उन नवाचारों और परिवर्तनों का अवलोकन देगा जो फ्रेमवर्क के नए संस्करण में हुए हैं।
.NET फ्रेमवर्क 4.0 के लिए संगतता और समर्थन
पिछले संस्करण के विपरीत, ASP.NET MVC 3 केवल
.NET फ्रेमवर्क के चौथे संस्करण का समर्थन करता है। इसके अलावा,
विज़ुअल स्टूडियो में एकीकरण के लिए डेवलपर घटक केवल
विज़ुअल स्टूडियो 2010 और
विज़ुअल वेब डेवलपर एक्सप्रेस 2010 के लिए समर्थित हैं।
ASP.NET MVC 3 फ्रेमवर्क ASP.NET MVC 2 के साथ एक साथ स्थापित किया जा सकता है, उन्हें एक दूसरे से अलग से इस्तेमाल किया जा सकता है।
ASP.NET MVC 3 के पिछले संस्करण से अपग्रेड करना
फ्रेमवर्क के पिछले संस्करणों से एक नई प्रारंभिक तक की परियोजनाओं को अद्यतन करने का सबसे आसान तरीका एक नया एमवीसी 3 प्रोजेक्ट बनाना और पुराने प्रोजेक्ट के सभी घटकों को इसमें स्थानांतरित करना है: नियंत्रक, विचार, सहायक फाइलें।
ASP.NET MVC 3 पूर्वावलोकन 1 के नए संस्करण में ASP.NET MVC 2 पर आधारित परियोजनाओं को मैन्युअल रूप से अपग्रेड करने के लिए, आपको निम्नलिखित कार्य करने चाहिए:
- सभी web.config फ़ाइलों को लाइनों में बदलें System.Web.Mvc, संस्करण = 2.0.0.0 लाइनों के साथ System.Web.Mvc, संस्करण = 3.0.0.0 ;
- दूसरे संस्करण के System.Web.Mvc विधानसभा के लिए एक कड़ी परियोजना से हटा दें और फ्रेमवर्क के तीसरे संस्करण की विधानसभा को जोड़ दें;
- .csproj प्रोजेक्ट फ़ाइलों को संपादित करें, {F85E285D-A4E0-4152-9332-AB1D724D3325} से {E53F885EA-EAE0-44A6-8774-FFD645390401} के साथ ProjectTypeGuids तत्व के मान को प्रतिस्थापित करें;
- यदि परियोजना ASP.NET MVC 2 के लिए संकलित विधानसभाओं को संदर्भित करती है, तो web.config फ़ाइल के configuaton अनुभाग में निम्नलिखित कोड जोड़ें:

ASP.NET MVC 3 पूर्वावलोकन 1 में नवाचार
फ्रेमवर्क के नए संस्करण में कई महत्वपूर्ण नवाचार हैं।
रेज़र व्यू इंजन सपोर्ट
इस संस्करण से शुरू होकर, ASP.NET MVC नए
रेजर व्यू मार्कअप सिंटैक्स के लिए समर्थन का परिचय देता है। बहुत पहले नहीं, रेजर को
वेबमार्टिक्स वेब डेवलपमेंट
टूल प्रोजेक्ट में विचारों के लिए मूल वाक्यविन्यास के रूप में
पेश किया गया था। रेजर अब MVC अनुप्रयोगों को विकसित करने के लिए उपलब्ध है।
रेजर HTML कोड के साथ काम करने के लिए एक सिंटैक्स अनुकूलित है। ASP.NET वेब फॉर्म इंजन नियंत्रण पर बहुत अधिक ध्यान केंद्रित करता है, और इसका कोड HTML कोड के बीच अतिभारित दिखता है। दूसरी ओर, रेजर, एक अत्यंत अनुकूलित समाधान प्रदान करता है जो HTML कोड में प्रस्तुति तर्क को सफलतापूर्वक एकीकृत करेगा।
एक उदाहरण पर विचार करें। नीचे पुराने प्रस्तुति इंजन (बाएं) और नए रेजर इंजन (दाएं) का उपयोग करके बनाया गया एक रूप है।


रेजर के बीच मुख्य अंतर जो आपकी आंख को पकड़ता है वह "<%%>" सेट खोलने और बंद करने की कमी है। वास्तव में, यहां तक कि
@ यूज़िंग ग्रुपिंग
सिंटैक्स में समापन तत्व शामिल नहीं होते हैं और केवल "}} चरित्र द्वारा दर्शाया जाता है। WebForms संस्करण में "<%}%>" लिखने की आवश्यकता के साथ इसकी तुलना करें और आप समझेंगे कि रेजर विकास का मुख्य फोकस क्या है - कोड और इसकी संक्षिप्तता को कम करके डेवलपर की उत्पादकता।
विशेष रूप से, कोड में शाखाएँ बनाते समय रेजर की सुविधा प्रकट होती है, उदाहरण के लिए, वेबफार्म और रेजर में कुछ कोड जैसा दिखता है:

![छवि [40] image[40]](http://microgeek.ru/upload/blog/aspnet/a7b/a7bfce70692963a046ca55754f9aa940.png)
यह उन शाखाओं को इकट्ठा करने के लिए बहुत थकाने वाला है, जिन्हें मार्कअप से शर्तों को "<%%>" तत्वों से हराना है। दूसरी ओर, देखें कि रेजर का उपयोग करते समय मार्कअप शाखाएं कितनी सामंजस्यपूर्ण रूप से दिखती हैं। उसी लाभ को कई अन्य मामलों में प्रदर्शित किया जाता है, जैसे कि चक्र।
रेजर में न केवल पात्रों को खोलने और बंद करने के विभिन्न वाक्यविन्यास में अंतर है। इसलिए, उदाहरण के लिए, नीचे पृष्ठ को कॉन्फ़िगर करने और WebFroms के लिए इसका शीर्षक सेट करने के लिए कोड है:

एक ही कोड, लेकिन रेजर शैली में, नीचे प्रस्तुत किया गया है:

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

दृश्य और ViewModel के गतिशील गुण
चूंकि MVC3 केवल .NET 4.0 का समर्थन करता है, इसलिए फ्रेमवर्क डेवलपर्स ASP.NET MVC में .NET के नए संस्करण का लाभ उठाने में सक्षम थे।
इन लाभों में से एक नए गतिशील प्रकारों का समर्थन है। MVC 3 में, परिचित
ViewData संपत्ति को
View और
ViewModel के दो गतिशील कार्यान्वयन के रूप में दर्शाया गया है। यह आपको निम्नलिखित कोड के बजाय अनुमति देता है:
ViewData ["शीर्षक"] = "शीर्षक"; </ em
ViewData ["संदेश"] = "हैलो वर्ल्ड!";
अलग-अलग मानों को आरंभिक करें:
ViewModel.Title = "शीर्षक";ViewModel.Message = "हैलो वर्ल्ड!";ऑब्जेक्ट के लिए तुरन्त एक्सटेंशन बनाने की क्षमता .NET 4.0 में एक गतिशील प्रकार की संपत्ति है। इस मामले में दृश्य के संदर्भ में खेतों तक पहुंच को सरल बनाया जाएगा:
<h2> View.Title </ h2><p> View.Message </ p>निर्भरता इंजेक्शन सहायता
एमवीसी 3 में, डेवलपर्स ने फ्रेमवर्क के विस्तार की संभावनाओं को बढ़ाया और अपने स्वयं के कार्यान्वयन का सहारा लेने की आवश्यकता के बिना बॉक्स से कोड को बाहर करने के लिए समर्थन जोड़ा।
ASP.NET MVC 3 पूर्वावलोकन 1 निम्न स्थानों में इंजेक्ट करने की क्षमता जोड़ता है:
- एक नियंत्रक कारखाने का निर्माण;
- नियंत्रकों का निर्माण;
- प्रेजेंटेशन इंजन के काम के विभिन्न चरण, वेब फॉर्म और रेजर दोनों;
- कार्रवाई फिल्टर
एक इंजेक्शन बनाने के लिए, डेवलपर को IServiceLocator इंटरफ़ेस का कार्यान्वयन निर्धारित करना होगा:

उसके बाद, डेवलपर वैश्विक स्थिर वर्ग का उपयोग करके एक नया उदाहरण दर्ज करता है, जिसे निम्नानुसार परिभाषित किया गया है:

डेवलपर
IServiceLocator का एक नया कार्यान्वयन सेट करने के लिए
SetCurrent विधि को कॉल करता है।
एक नया कार्यान्वयन जोड़ने के बाद, ASP.NET MVC 3 इंजन इसका उपयोग निम्नलिखित उद्देश्यों के लिए करेगा:
- नियंत्रक कारखाने और नियंत्रकों की तात्कालिकता;
- प्रेजेंटेशन इंजन और प्रेजेंटेशन पेजों की तात्कालिकता;
- तुरंत कार्रवाई फिल्टर।
ASP.NET MVC 3 के निम्नलिखित संस्करण अतिरिक्त कोड इंजेक्शन क्षमताएं प्रदान करेंगे:
- मॉडल बाइंडर तंत्र के लिए;
- मूल्यों के प्रदाता (मूल्य प्रदाता);
- सत्यापन प्रदाताओं के लिए;
- मॉडल मेटाडेटा प्रदाताओं के लिए।
निम्नलिखित बदलाव मानक ASP.NET MVC तंत्र के व्यवहार में कोड इंजेक्शन समर्थन की शुरूआत के लिए किए गए थे:
- ControllerBuilder.GetControllerFactory पहले IServiceLocator के मौजूदा कार्यान्वयन का उपयोग करेगा और उसके बाद ही, यदि कोई कार्यान्वयन नहीं है, तो नियंत्रक कारखाना बनाने के लिए पुराने तंत्र का उपयोग करें;
- नियंत्रक बनाते समय, DefaultControllerFactory पहले IServiceLocator के मौजूदा कार्यान्वयन का उल्लेख करेगा और उसके बाद ही, यदि कोई कार्यान्वयन नहीं है, तो नियंत्रक बनाने के लिए पुराने तंत्र का उपयोग करें;
- फ़ंक्शन DefaultControllerFactory.ReleaseController - नियंत्रक जारी - केवल IServiceLocator के कार्यान्वयन के माध्यम से किया जाएगा, अगर कोई कार्यान्वयन नहीं है, तो डिफ़ॉल्ट कार्यान्वयन का उपयोग विशेष IMvcServiceLocator इंटरफ़ेस से किया जाएगा;
- ViewEngineCollection , पहले की तरह, आपको व्यू इंजन के संग्रह को जोड़ने की अनुमति देगा, लेकिन इसके अलावा MVC 3 में इस संग्रह में वस्तुतः सभी दृश्य इंजन शामिल होंगे जो IServiceLocator के कार्यान्वयन में पंजीकृत हैं। जिसका अर्थ है विधि कॉल। FindView या। FindPartialView सामान्यीकृत मान लौटाएगा, या तो मैन्युअल रूप से जोड़ा जाता है या IServiceLocator कार्यान्वयन का उपयोग करके परिभाषित किया जाता है;
- WebFormView को अपडेट किया गया है, ताकि IServiceLocator कार्यान्वयन या पुराने तरीके से Activator.CreateInstance का उपयोग करके पेज और नियंत्रण बनाए जाते हैं, यदि आप IServiceLocator कार्यान्वयन के माध्यम से पेज नहीं बना सकते हैं।
वैश्विक फिल्टर
MVC 3 एक वैश्विक फ़िल्टर तंत्र जोड़ता है जो आपको उन फ़िल्टर को परिभाषित करने की अनुमति देता है जो हर बार किसी भी नियंत्रक के कार्यों को बुलाया जाता है। फ़िल्टर जोड़ने के लिए, वैश्विक स्थिर वर्ग
GlobalFilters का उपयोग किया जाता है :
GlobalFilters.Filters.Add (नई MyActionFilter ());
आप नए
IFilterProvider इंटरफ़ेस के लिए एक इंजेक्शन बनाकर वैश्विक फ़िल्टर तंत्र को ओवरराइड कर सकते हैं। यह आपको वैश्विक फ़िल्टर निष्पादित करने के लिए अपना तर्क बनाने की अनुमति देगा।
JsonValueProviderFactory मूल्य प्रदाता
नया मूल्य प्रदाता आपके कार्यों को JSON प्रारूप में पैरामीटर सेट के साथ अनुरोध प्राप्त करने और उन्हें कार्रवाई विधि के मापदंडों पर मैप करने की अनुमति देगा। पहले, इस कार्यक्षमता को
ASP.NET MVC फ्यूचर्स लाइब्रेरी में होस्ट किया गया था।
उदाहरण के लिए, यदि MIME प्रकार के
एप्लिकेशन / json के साथ POST अनुरोध में मान होता है:
"" ProductName ":" मिल्क "," कॉस्ट ":" 12.0 "}फिर,
JsonValueProviderFactory प्रदाता का उपयोग करके
, ये मान स्वचालित रूप से निम्न क्रिया में
ProductModel प्रकार के साथ पैरामीटर को असाइन किए जाते हैं:
[HttpPost]सार्वजनिक ActionResult SaveProduct (ProductModel productModel){...}प्रकार ProductModel के रूप में घोषित किया गया है
सार्वजनिक वर्ग ProductModel
{
publi स्ट्रिंग ProductName {प्राप्त; सेट ;;
सार्वजनिक स्ट्रिंग लागत {प्राप्त; सेट;}
}.NET 4.0 सत्यापन विशेषता और IValidatableObject के लिए समर्थन
ValidationAttribute वर्ग .NET 4.0 में अद्यतन किया गया था और इस प्रकार
ValidationContext के पैरामीटर के साथ नए अतिभारित
IsValid विधि के साथ विस्तार किया गया। यह पैरामीटर, नए गुण मान के अलावा, सत्यापन संदर्भ और सत्यापन ऑब्जेक्ट का एक उदाहरण है। यह आपको न केवल वर्तमान संपत्ति की जांच करने की अनुमति देगा, बल्कि ऑब्जेक्ट के अन्य गुण भी और उनके मूल्यों के आधार पर मान्य करेगा।

ऊपर दिया गया उदाहरण सत्यापन के संदर्भ में पारित किसी वस्तु के दो गुणों की तुलना दर्शाता है।
इसके अलावा, .NET 4.0
में एक नया
IValiditableObject इंटरफ़ेस जोड़ा
गया है , जो आपको अपने मॉडल के वर्ग स्तर पर सत्यापन तर्क को परिभाषित करने की अनुमति देता है।

मॉडल के ऊपर परिभाषित
आईवीडबलिटेबल ऑबजेक्ट इंटरफेस को अपने सत्यापन के लिए लागू करता है। MVC 3 इस इंटरफ़ेस का समर्थन करता है और इसके आधार पर मॉडल को मान्य करता है।
इंटरफ़ेस IClientValidatable
इस नए इंटरफ़ेस के रूप में घोषित किया गया है

यह ग्राहक सत्यापन का समर्थन करने वाली जानकारी के साथ तीसरे पक्ष के सत्यापन ढांचे को प्रदान करने के लिए डिज़ाइन किया गया है।
.NET 4 मेटाडेटा विशेषताओं के लिए समर्थन
MVC 3 नई मेटाडेटा विशेषताओं का समर्थन करता है जो .NET 4 में पेश किए गए थे। उदाहरण के लिए, DisplayAttribute। MVC 3 में वास्तव में उपयोग की जाने वाली नई विशेषताओं की एक पूरी सूची अभी तक उपलब्ध नहीं है, इस मुद्दे पर कोई जानकारी नहीं है, और परियोजना के लिए स्रोत कोड अभी तक उपलब्ध नहीं हैं।
IMetadataAware
नया इंटरफ़ेस के रूप में परिभाषित किया गया है

यह निर्धारित करने में सक्षम है कि जब मॉडल के लिए मेटाडेटा बनाया गया था और उस क्षण में अतिरिक्त कार्य करने में सक्षम होने का इरादा था। इस इंटरफ़ेस का उपयोग एसोसिएटेडमैडेटाटा पोप्रोइडर से विरासत में मिली कक्षाओं द्वारा किया जाता है, उदाहरण के लिए, DataAnnotations मेटाडेटा वर्ग, DataAnnotationsModelMetadataProvider।
नए प्रकार के एक्शन परिणाम
एमवीसी 3 ने एक्शन परिणाम लौटाने के लिए कई नए प्रकार पेश किए।
HttpNotFoundResult
एक साधारण क्रिया परिणाम प्रकार जो एक परिणाम देता है यह दर्शाता है कि अनुरोधित संसाधन नहीं मिला (HTTP 404)। नियंत्रकों में एक नया सहायक विधि शामिल है,
HttpNotFound (), जो
HttpNotFoundResult प्रकार
लौटाता है :

HttpStatusCodeResult
नए वर्ग के रूप में घोषित
HttpStatusCodeResult वर्ग
को एक क्रिया के परिणामस्वरूप एक मनमाना HTTP कोड वापस करने के लिए डिज़ाइन किया गया है।
जैसा कि आप देख सकते हैं, इसमें दो कंस्ट्रक्टर शामिल हैं जो HTTP कोड के डिजिटल मूल्य को स्वीकार करते हैं और दूसरा परिणाम के विवरण के साथ एक अतिरिक्त लाइन लेता है।
लगातार अनुप्रेषित
MVC3 एक स्थायी रीडायरेक्ट (HTTP 301) के रूप में एक्शन परिणाम लौटाने के लिए समर्थन जोड़ता है। यह निम्नलिखित नए नियंत्रक तरीकों का उपयोग करके किया जा सकता है:
- पुनर्निर्देशन - निर्दिष्ट URL पर पुनर्निर्देशित करता है;
- RedirectToRoutePermanent - वर्तमान रूट पर रीडायरेक्ट करता है (या आप वैकल्पिक पैरामीटर रूटनाम और रूटवैल्यूज़ निर्दिष्ट कर सकते हैं);
- RedirectToActionPermanent - निर्दिष्ट कार्रवाई के लिए पुनर्निर्देशित करता है (वैकल्पिक पैरामीटर नियंत्रक नाम और मार्गवैल्यू निर्दिष्ट किए जा सकते हैं)।
MVC2 के साथ असंगत परिवर्तन
अपवाद फ़िल्टर के निष्पादन का क्रम बदल दिया गया है। इससे पहले, नियंत्रक पर लागू अपवाद फ़िल्टर कार्रवाई पर लागू किए गए फ़िल्टर से पहले निष्पादित किए गए थे (यदि उनके पास समान आदेश मूल्य था)। अब और आगे यह व्यवहार बदल रहा है। क्रियाओं के लिए अपवाद फ़िल्टर पहले निष्पादित किए जाएंगे, उसके बाद नियंत्रकों पर लागू किए गए फ़िल्टर। यदि इन फिल्टरों के लिए ऑर्डर का मूल्य अलग है, तो वे ऑर्डर में परिभाषित ऑर्डर के अनुसार पहले ही निष्पादित हो जाएंगे।
ज्ञात मुद्दे
इस रिलीज़ में कई समस्याएँ हैं जिन्हें भविष्य के रिलीज़ में संबोधित किया जाएगा:
- रेजर प्रस्तुति इंजन के लिए विजुअल स्टूडियो में कोई सिंटैक्स हाइलाइटिंग और इंटेलीसेनस समर्थन नहीं है;
- फ़ाइलों को संपादित करते समय गो टू कंट्रोलर फ़ंक्शन का उपयोग करने का कोई तरीका नहीं है। cshtml (रेजर);
- रेजर व्यू इंजन के साथ कोड को एडिट करते समय विजुअल स्टूडियो स्निपेट्स तक कोई पहुंच नहीं है।
निष्कर्ष
पहले प्रारंभिक रिलीज के परिणामों के अनुसार, हम आत्मविश्वास से कह सकते हैं कि ASP.NET MVC 3 का नया संस्करण बहुत सारी नई सुविधाएँ लाएगा। निरंतर अध्ययन के लिए कार्यशीलता पहले से ही उपलब्ध है और मुझे लगता है कि भविष्य के रिलीज के साथ ही नई सुविधाओं की संख्या में वृद्धि होगी।
इसीलिए, नई कार्यक्षमता का अध्ययन और परीक्षण करने के लिए, प्रारंभिक संस्करणों को भागों में जारी किया जाता है। मैं सभी ASP.NET MVC डेवलपर्स से आग्रह करता हूं कि MVC3 पूर्वावलोकन 1 रिलीज़ पर पूरा ध्यान दें और अपनी नई सुविधाओं की खोज के लिए अपना समय समर्पित करें।