2012-05-23 12 views
8

मैं कुछ कस्टम मानचित्र मार्ग बनाने का प्रयास कर रहा हूं लेकिन यह काफी सही काम नहीं कर सकता है।कस्टम मैप रूट

मेरा अंतिम लक्ष्य निम्न जैसा कुछ निर्दिष्ट करने में सक्षम होना है। जहां से मुझे अनिवार्य रूप से मेरा आईडी "आईडी" और "नाम" के मूल्य जोड़े के साथ बनाया गया है। यह नाम अप्रासंगिक है और पूरी तरह से उपयोगकर्ता की सुखदताओं के लिए, मुझे अपने नियंत्रक में आईडी की आवश्यकता होगी हालांकि।

/डैशबोर्ड्स/5-मेरी-एस्टेट के नाम/89-मेरी-उपसमूह-नाम/133-शायद-भी-एक और-उपसमूह

शुरुआत मैं पहले खंड पर काम कर रहा हूँ के लिए और परेशानी हो रही है।

ब्राउजिंग करने के लिए "http: // localhost: 53933/डैशबोर्ड्स/109-निर्माण-xyz" A public action method '109-building-xyz' was not found on controller 'MyInterfaceInterface.Controllers.DashboardsController'.

routes.MapRoute(
    "Dashboard", 
    "dashboards/{id}-{name}", // URL pattern 
    new { controller = "Dashboards", action = "Index" }, 
    new { id = @"\d+", name = UrlParameter.Optional } 
); 

जाहिर त्रुटि मैं इस चाहता था निम्नलिखित मार्ग उत्पन्न का उपयोग कर सूचकांक समारोह के लिए रूट किया जा करने के लिए, जबकि पैरामीटर के साथ।

मैं क्या गलत कर रहा हूं? क्या मैं इसे सही ढंग से भी संरचित कर रहा हूं? मैं एक वेब-PHP पृष्ठभूमि से आया हूं और ऐसी चीजों को प्राप्त करने के लिए htaccess का उपयोग कर रहा हूं।

धन्यवाद

+1

क्या आपने इसे डिफ़ॉल्ट मार्ग के बाद या उससे पहले जोड़ा था? – Chris

+0

मुझे लगता है कि आप फॉरवर्ड स्लैश का उपयोग करके केवल पैरामीटर अलग कर सकते हैं (लेकिन इस पर गलत हो सकता है)। यदि डैश को विभाजक के रूप में स्वीकार किया जाता है तो संभवतः आपको मार्ग के काम के लिए आईडी के बाद डैश शामिल करने की आवश्यकता होगी। इसके अलावा, जैसा कि क्रिस संकेत देता है, मार्ग क्रम महत्वपूर्ण है। मैं रूटडेबगर पैकेज को स्थापित करने के लिए NuGet का उपयोग करने की सलाह दूंगा (और इसे Web.config में सक्षम करें)। यह आपको आसानी से पता लगाने की अनुमति देता है कि किसी दिए गए यूआरएल मैचों का कौन सा मार्ग है। –

उत्तर

9

मार्गों का क्रम महत्वपूर्ण है। एमवीसी पहले घोषित मार्ग से एक पैटर्न के साथ मेल खाता है जो यूआरएल पैटर्न से मेल खाता है।

आप इस राशि तो अगर:

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}", // URL pattern 
    new { controller = "Home", action = "Index" }, 
    new { id = UrlParameter.Optional } 
); 
routes.MapRoute(
    "Dashboard", 
    "dashboards/{id}-{name}", // URL pattern 
    new { controller = "Dashboards", action = "Index" }, 
    new { id = @"\d+", name = UrlParameter.Optional } 
); 

तो क्या यूआरएल http://localhost:53933/dashboards/109-building-xyz है कि MVC नियंत्रक और "109-निर्माण-xyz" कार्रवाई करने के लिए करने के लिए "डैशबोर्ड" से मेल खाएगी साथ क्या होगा।

तुम हमेशा इतनी तरह बाद में पहली बार अपने सबसे विशिष्ट मार्गों घोषित करने के लिए, और अधिक सामान्य मार्गों, की जरूरत है:

routes.MapRoute(
    "Dashboard", 
    "dashboards/{id}-{name}", // URL pattern 
    new { controller = "Dashboards", action = "Index" }, 
    new { id = @"\d+", name = UrlParameter.Optional } 
); 
routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}", // URL pattern 
    new { controller = "Home", action = "Index" }, 
    new { id = UrlParameter.Optional } 
); 

हालांकि, मोर्टेन Mertner सही उसकी टिप्पणी में है - मुझे नहीं लगता कि आप कर सकते हैं 2 रूट पैरामीटर जो फॉरवर्ड स्लैश द्वारा अलग नहीं होते हैं। डिफ़ॉल्ट रूटिंग इंजन के साथ इसका उपयोग करने के लिए आपको अपने यूआरएल पैटर्न को इस तरह से बदलने की आवश्यकता होगी:

"dashboards/{id}/{name}" 
संबंधित मुद्दे