2010-08-12 22 views
9

अगर मैं इस तरह एक मार्ग है:एएसपी.नेट एमवीसी 2 में बाधा के साथ वैकल्पिक रूटिंग पैरामीटर?

routes.Add(new Route("{controller}/{page}", 
    new RouteValueDictionary 
    { 
     { "page", UrlParameter.Optional } 
    }, 
    new RouteValueDictionary 
    { 
     { "page", @"[Pp]age\d+" } 
    }, 
    new MvcRouteHandler() 
)); 

तो मार्ग से मेल नहीं खाता है जब {पेज} याद आ रही है, फिर भी अगर मैं बाधा यह मेल खाता है हटा दें। क्या यह बग है या ये कोई विशेषता है?

उत्तर

7

यह एक विशेषता है: अगर पैरामीटर वैकल्पिक है तो बाधा कैसे मेल खा सकती है? आप या तो अपनी समस्या को हल करने के लिए "पृष्ठ" के लिए डिफ़ॉल्ट मान सेट करना चाहते हैं, या "([पीपी] आयु \ d +) के साथ अपने regex को प्रतिस्थापित कर सकते हैं?" कुछ भी मैच करने की अनुमति देने के लिए (मुझे इस बारे में निश्चित नहीं है और इसे एटीएम का परीक्षण नहीं कर सकता)।

+1

धन्यवाद, UrlParameter की बजाय डिफ़ॉल्ट मान निर्धारित करना। वैकल्पिक ने चाल की। Regexp बदलना काम नहीं किया। – ciscoheat

+0

क्या आप वाकई रेगेक्स काम नहीं करते हैं? इससे मेरा काम बनता है। –

8

मैं ^$ का उपयोग कर रहा हूं। एक रेगेक्स के भीतर, जैसे: (^ $ | [पीपी] आयु \ डी +)। मुझे इस सवाल का पता लगाने के दौरान यह सवाल मिला और मुझे लगा कि मैं जो मिला वह जोड़ दूंगा।

routes.MapRoute(
    name: "News Archive", 
    url: "News/{page}", 
    defaults: new { controller = "news", action = "List", page= UrlParameter.Optional }, 
    constraints: new { page= @"^$|[0-9][0-9]" }); 
संबंधित मुद्दे