2011-02-12 11 views
5

मैं एएसपी.NET एमवीसी 3 का उपयोग कर एक सीएमएस सिस्टम का एक बहुत ही सरल प्रोटोटाइप लिखने की कोशिश कर रहा हूं।मैं यह एएसपी.NET रूटिंग ठीक से काम करने के लिए कैसे प्राप्त करूं?

सिस्टम में दो क्रियाओं वाला एक नियंत्रक है: दिखाएं और बनाएं।

'शो' कार्रवाई का प्रारूप 5 वैकल्पिक भागों तक लेना है, उदाहरण के लिए डोमेन.com/part1/part2/part3/part4/part5

'शो' एक्शन के लिए प्रारूप समान है, लेकिन इसमें अग्रणी 'बनाना' भाग होना चाहिए उदा। domain.com/create/part1/part2/part3/part4/part5

मेरे पास मेरी Global.asax में निम्न सेटिंग:

routes.MapRoute(
     "CreatePageRoute", 
     "create/{part1}/{part2}/{part3}/{part4}/{part5}", 
     new 
      { 
       controller = "Page", 
       action = "Create", 
       part1 = UrlParameter.Optional, 
       part2 = UrlParameter.Optional, 
       part3 = UrlParameter.Optional, 
       part4 = UrlParameter.Optional, 
       part5 = UrlParameter.Optional 
      }); 

    routes.MapRoute(
     "Default", 
     "{part1}/{part2}/{part3}/{part4}/{part5}", 
     new 
      { 
       controller = "Page", 
       action = "Show", 
       part1 = UrlParameter.Optional, 
       part2 = UrlParameter.Optional, 
       part3 = UrlParameter.Optional, 
       part4 = UrlParameter.Optional, 
       part5 = UrlParameter.Optional 
      } 
     ); 

मेरे 'शो' पद्धति किसी पृष्ठ मिलान खोजने के लिए विफल रहता है आपूर्ति पथ, यह एक 'नहीं मिला' पृष्ठ देता है जिसमें आपूर्ति किए गए पथ के साथ एक नया पृष्ठ बनाने के विकल्प शामिल होते हैं। इस लिंक के माध्यम का उपयोग कर परिभाषित किया गया है:

@Html.ActionLink("Yes", "Create") 

[ "हाँ" सवाल का जवाब का प्रतिनिधित्व करता है "क्या आप इस पथ के लिए एक पृष्ठ बनाने के लिए करना चाहते हैं?"]

तो जब 'डिफ़ॉल्ट परीक्षण 'मार्ग, मुझे लगता है कि मेरे' शो 'कार्रवाई के बाद रास्तों में से सभी के लिए सफलतापूर्वक कहा जाता है: {खाली} एक a/b एक/बी/सी एक/बी/सी/डी a/b/सी/डी/ई

जो महान है।

हालांकि, "@ एचटीएमएल.एक्शनलिंक (" हां "," बनाएं ") द्वारा उत्पन्न परिणामी 'बनाएं' लिंक" असंगत परिणाम देता है। ऐसा लगता है कि इनपुट की लंबाई के आधार पर एक अलग हाइपरलिंक उत्पन्न होता है। परिणाम निम्न हैं:

पथ के लिए "{खाली}", लिंक "{: बंदरगाह} स्थानीय होस्ट /" प्रदान करता है - मुझे उम्मीद थी के लिए:

पथ के लिए "" {} बंदरगाह स्थानीय होस्ट/बनाने "/ए ", लिंक" लोकलहोस्ट {: पोर्ट}/"प्रदान करता है - मैं उम्मीद कर रहा था" लोकलहोस्ट {: पोर्ट}/create/a "

पथ"/ए/बी "के लिए, लिंक" localhost { : पोर्ट}/ए "- मैं उम्मीद कर रहा था" लोकलहोस्ट {: पोर्ट}/निर्माण/ए/बी "

पथ"/ए/बी/सी "के लिए, लिंक" localhost {: port}/a प्रदान करता है/बी "- मैं उम्मीद कर रहा था" localhost {: port}/create/a/b/c "

पथ "/ ए/बी/सी/डी" के लिए, लिंक "लोकलहोस्ट {: पोर्ट}/create/a/b/c/d" प्रदान करता है - जो मैं

पथ के लिए "/ए/बी/सी/डी/ई ", लिंक" localhost {: port}/create/a/b/c/d/e "प्रदान करता है - जो मैं

केवल यही क्यों करता है जब मैं "/ ए/बी/सी/डी" या "/ ए/बी/सी/डी/ई" आपूर्ति करता हूं तो काम करें?

मैं जानता हूँ कि मैं मूर्खतापूर्ण जा रहा हूँ, मुझे

सैंडी

+0

कुछ समय पहले मुझे एक समान समस्या थी। 'UrlParameter.Optional' को' '' ' – Omar

उत्तर

1

मदद कृपया मुझे विश्वास है कि कई वैकल्पिक पैरामीटर discrepency उत्पन्न कर रहे हैं।
कैसे:

routes.MapRoute("Create5", "create/{part1}/{part2}/{part3}/{part4}/{part5}", new { controller = "Page", action = "Create", part5 = UrlParameter.Optional }); 
    routes.MapRoute("Create3", "create/{part1}/{part2}/{part3}", new { controller = "Page", action = "Create", part3 = UrlParameter.Optional }); 
    routes.MapRoute("Create1", "create/{part1}", new { controller = "Page", action = "Create", part1 = UrlParameter.Optional }); 

    routes.MapRoute("Default5", "{part1}/{part2}/{part3}/{part4}/{part5}", new { controller = "Page", action = "Show", part5 = UrlParameter.Optional }); 
    routes.MapRoute("Default3", "{part1}/{part2}/{part3}", new { controller = "Page", action = "Show", part3 = UrlParameter.Optional }); 
    routes.MapRoute("Default1", "{part1}", new { controller = "Page", action = "Show", part1 = UrlParameter.Optional }); 
+0

पर बदलने का प्रयास करें बहुत धन्यवाद, यह चाल अच्छी तरह से करता है। साथ ही, जिस तरीके से आपके समाधान ने वैकल्पिक मानकों के न्यायसंगत उपयोग द्वारा आवश्यक मार्गों की संख्या कम कर दी थी, वह रोशनी थी। मेरी सहायता करने के लिए धन्यवाद। – sandy

संबंधित मुद्दे

 संबंधित मुद्दे