ASP.NET MVC 3.0 Routing behaviour -
मेरे पास कुछ कार्रवाइयों के साथ नियंत्रक ब्लॉगकंट्रोलर है:
1) अनुक्रमणिका (स्ट्रिंग आईडी ) - सभी पदों को दिखाएँ / एक पैरा शो करें यदि पैरामीटर आईडी निर्दिष्ट है 2) नया () - नई पोस्ट जोड़ें 3) हटाएं () - पोस्ट हटाएं 4) और कुछ और क्रियाएं मैं ब्राउज़र में mysite / blog टाइप करता हूं, अगर मैं टाइप करता हूं तो <<> mysite / blog / postnameid मैं एक पोस्ट देखना चाहता हूं। समस्या जब मैं mysite / blog / postnameid टाइप करता हूं तो यह काम नहीं कर रहा है ( संसाधन नहीं मिल सकता है। ), लेकिन अगर मैं टाइप करता हूं Mysite / blog / index / postnameid इस तरह से यह काम कर रहा है मैं mysite / blog / postnameid को भी काम करने के लिए कैसे कर सकता हूं। global.ascx > <कोड> routes.IgnoreRoute ( "{} संसाधन .axd / {* pathInfo}"); मार्गों। MapRouteLowercase ("ब्लॉग", // रूट नाम "ब्लॉग / {action} / {id}", // मापदंडों के साथ URL नया {नियंत्रक = "ब्लॉग", क्रिया = "अनुक्रमणिका"} // पैरामीटर चूक); Routes.MapRouteLowercase ("डिफ़ॉल्ट", // रूट नाम "{नियंत्रक} / {action} / {id}", // यूआरएल पैरामीटर के साथ नया {नियंत्रक = "होम", एक्शन = "इंडेक्स", id = UrlParameter.Optional });
यदि मैं इसे इस तरह बदलता हूं
मार्ग। MapRouteLowercase ("ब्लॉग", // रूट नाम "ब्लॉग / {आईडी}", // नया पैरामीटर के साथ यूआरएल {नियंत्रक = "ब्लॉग", एक्शन = "इंडेक्स"} // पैरामीटर चूक); mysite / blog / postnameid काम कर रहा है, लेकिन नई () जैसी सभी अन्य क्रियाएं, हटाएं () उसके बाद काम करना बंद करें ( संसाधन नहीं मिल सकता है । ) अद्यतन करें: मुझे यह पता करने में भूल गया कि आईडी आईडी है, नहीं int इसलिए @ डरिन उत्तर से मैंने new {id = @ "\ w +"} से new {id = @ "\ d +"} बदल दिया और अब सभी सीमें काम कर रहे हैं लेकिन अब जब मैंने blog / new टाइप किया है, उदाहरण के लिए, यह शो / नया insteard blog / new के लिए रूटिंग है < P> यह एक बुरा विचार है और एक एकल नियंत्रक कार्रवाई करने के लिए निस्संदेह सम्मेलनों के खिलाफ है जो 2 बातें करता है और निश्चित रूप से एकल जिम्मेदारी सिद्धांत (सभी सूची पोस्ट अगर कोई आईडी निर्दिष्ट नहीं किया गया है और किसी आईडी को निर्दिष्ट किया गया है तो कोई पोस्ट दिखाएं)। सही तरीके से निम्नलिखित होना होगा:
-
/ ब्लॉग = & gt; ब्लॉग नियंत्रक / सूचकांक = & gt; सभी पोस्ट की सूची -
/ blog / 123 = & gt; BlogController / दिखाएँ (आईडी = 123) = & gt; किसी दिए गए पोस्ट का विवरण दिखाएं -
/ ब्लॉग / नया = & gt; BlogController / New () = & gt; एक नई पोस्ट लिखना शुरू करें -
/ blog / delete / 123 = & gt; BlogController / Delete (id = 123) = & gt; दी गई पोस्ट हटाएं जो निम्नलिखित मार्गों से प्राप्त होगा:
सार्वजनिक स्थैतिक शून्य रजिस्टररॉउट्स (रूट कलेक्शन मार्ग) {routes.IgnoreRoute ("{resource} .axd / {* pathInfo} "); ("ब्लॉग", "ब्लॉग / {आईडी}", नया {नियंत्रक = "ब्लॉग", क्रिया = "दिखाएँ"}, नया {id = @ "\ d +"}); Routes.MapRoute ("डिफ़ॉल्ट", "ब्लॉग / {कार्रवाई} / {आईडी}", नया {नियंत्रक = "ब्लॉग", कार्रवाई = "सूचकांक", आईडी = UrlParameter.Optional}); } पहली परिभाषा पर आवश्यक मार्ग बाधा ध्यान दें जो इंगित करता है कि सभी आईडी को किस प्रकार बनाया जाना चाहिए ताकि रूटिंग इंजन आईडी और एक्शन नाम के बीच विवाद कर सके।
यह कहा जा रहा है कि अगर आप 2 सिद्धांतों का उल्लंघन करना चाहते हैं जो मैंने पहले उल्लेख किया है और जिस मार्ग पर आप चाहें हैं, तो थोड़ा सा अनुकूलन आवश्यक होगा:
सार्वजनिक स्थैतिक शून्य रजिस्टररॉउट्स (रूट कलेक्शन मार्ग) {routes.IgnoreRoute ( "{} संसाधन .axd / {* pathInfo}"); ("ब्लॉग", "ब्लॉग / {आईडी}", नया {नियंत्रक = "ब्लॉग", क्रिया = "अनुक्रमणिका"}, नया {id = @ "\ d +"}); Routes.MapRoute ("डिफ़ॉल्ट", "ब्लॉग / {कार्रवाई} / {आईडी}", नया {नियंत्रक = "ब्लॉग", कार्रवाई = "सूचकांक", आईडी = UrlParameter.Optional}); } अब:
-
/ ब्लॉग = & gt; ब्लॉग नियंत्रक / सूचकांक (आईडी = शून्य) = & gt; सभी पोस्ट की सूची -
/ blog / 123 = & gt; ब्लॉग कंट्रोलर / इंडेक्स (आईडी = 123) = & gt; किसी दिए गए पोस्ट का विवरण दिखाएं -
/ ब्लॉग / नया = & gt; BlogController / New () = & gt; एक नई पोस्ट लिखना शुरू करें -
/ blog / delete / 123 = & gt; BlogController / Delete (id = 123) = & gt; दी गई पोस्ट हटाएं
Comments
Post a Comment