2013-02-14 30 views
6

मेरे पास एक एएसपी.नेट एमवीसी रूटिंग प्रश्न है। सबसे पहले, मुझे अपने क्षेत्रों के सेटअप की व्याख्या करने दें। यह काफी आसान है।एकाधिक एएसपी.नेट एमवीसी मार्ग मैपिंग को रोकने के लिए कैसे करें

Areas 
| 
+--Foo 
    | 
    +--Controllers 
     | 
     +--BarController.cs 

मैं, "BarController.cs" कहा जाता है "फू" कहा जाता है मेरी क्षेत्रों में एक फ़ोल्डर और नियंत्रक बार नियंत्रक "DoStuff1()", "DoStuff2()" का नाम कई तरीके है है आदि

मेरी वेबसाइट निम्न URL का उपयोग करता है:

/foo/bar/15 
/foo/bar/dostuff1 
/foo/bar/dostuff2 

पहले यूआरएल एक आईडी की आवश्यकता है और एक दृश्य और मॉडल के साथ वेब पेज को भरने के लिए बार नियंत्रक में डिफ़ॉल्ट सूचकांक() विधि का उपयोग करता।

दूसरे और तीसरे यूआरएल में, मैं उन्हें jQuery AJAX कॉल के लिए उपयोग कर रहा हूं।

यहाँ मेरी क्षेत्र registrion से कोड

context.MapRoute(null, "Foo/Bar/DoStuff1", new 
{ 
    action = "DoStuff1", 
    controller = "Bar" 
}); 

context.MapRoute(null, "Foo/Bar/DoStuff2", new 
{ 
    action = "DoStuff2", 
    controller = "Bar" 
}); 

context.MapRoute(null, "Foo/Bar/{id}", new 
{ 
    action = "Index", 
    controller = "Bar" 
}); 

मेरे समस्या प्रत्येक नए नियंत्रक विधि मैं बनाने के लिए, मैं क्षेत्र registrion फाइल में एक और मार्ग मानचित्रण जोड़ने के लिए है कि है। मैं कैसे एक सामान्य मार्ग मानचित्रण यूआरएल मैंने ऊपर उल्लेख किया है कि नहीं है संभाल करने के लिए बना सकते हैं

context.MapRoute(null, "Foo/Bar/DoStuff3", new 
{ 
    action = "DoStuff3", 
    controller = "Bar" 
}); 

: उदाहरण के लिए, अगर मैं विधि DoStuff3() जोड़ने के लिए, मैं क्षेत्र पंजीकरण करने के लिए इस जोड़ने की आवश्यकता होगी नए नियंत्रक विधियों के लिए क्षेत्र पंजीकरण फ़ाइल में नए परिवर्धन की आवश्यकता है?

+0

यह आप क्या देख रहे हैं? http://stackoverflow.com/questions/2682170/asp-net-mvc-areas-how-to-hide-area-name-in-url –

उत्तर

3

आप नियंत्रक कार्रवाई को खींच सकते हैं।

इस तरह यूआरएल लिखें:

"Foo/Bar/{action}" 

साथ ही, आप के रूप में अच्छी नियंत्रक बाहर खींच सकते हैं, और लिखने

"Foo/{controller}/{action}" 

इस मामले में, action = "Index" "सूचकांक" का डिफ़ॉल्ट मान प्रदान करता है यदि कोई कार्रवाई पैरामीटर प्रदान नहीं किया गया है।

इस मामले में, आपको "Foo/Bar/{action}" और "Foo/Bar/{id}" के बीच असंबद्ध करने की आवश्यकता है। चूंकि मिलान क्रम में किया जाता है, इसलिए आप id रूट पहले रखना चाहते हैं, और id पैरामीटर पर एक संख्यात्मक constraint जोड़ें। यह वैध संख्यात्मक आईडी को मिलान करने की अनुमति देता है, और अगले नाम पर जाने के लिए कार्रवाई नाम। आपका दो मार्गों इस प्रकार दिखाई देगा:

context.MapRoute(null, "Foo/Bar/{id}", new 
{ 
    action = "Index", 
    controller = "Bar" 
}, 
new { id = @"\d+" }); 

context.MapRoute(null, "Foo/Bar/{action}", new 
{ 
    action = "Index", //optional default parameter, makes the route fall back to Index if no action is provided 
    controller = "Bar" 
}); 
+0

मुझे अभी संख्यात्मक बाधा जोड़ने पर एक लेख मिला है। प्रश्न में मेरा अद्यतन अनुभाग देखें। – Halcyon

+0

असल में, मैंने उस बदलाव को वापस ले लिया है। समाधान/उत्तर quesiton में संपादित नहीं किया जाना चाहिए। प्रश्न में केवल सवाल होना चाहिए। उत्तरों को उत्तर के रूप में पोस्ट किया जाना चाहिए (और मैंने पहले ही उस लेख से मेरे उत्तर में लिंक किया है)। – yoozer8

0

डिफ़ॉल्ट रूटिंग कि MVC टेम्पलेट्स के साथ आता है की जरूरत मार्ग विन्यास के अधिकांश के लिए अच्छे हैं।

routes.MapRoute(
        name: "Default", 
        url: "{controller}/{action}/{id}", 
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      );