2008-10-20 9 views
36

मैं एएसपी.नेट एमवीसी फ्रेमवर्क के भीतर दोस्ताना यूआरएल कैसे उत्पन्न करूं? उदाहरण के लिए, हम एक यूआरएल है कि इस तरह दिखता है मिल गया है:मैं एएसपी.नेट एमवीसी में एक दोस्ताना यूआरएल कैसे बना सकता हूं?

http://site/catalogue/BrowseByStyleLevel/1

1 अध्ययन स्तर (उच्च इस मामले में) ब्राउज़ करने के लिए की पहचान है, लेकिन I'l ही में URL पुन: प्रारूपित करना चाहते रास्ता StackOverflow यह करता है।

उदाहरण के लिए, इन दो URL एक ही जगह पर ले जाएगा:

https://stackoverflow.com/questions/119323/nested-for-loops-in-different-languages

https://stackoverflow.com/questions/119323/

संपादित करें: यूआरएल के अनुकूल भाग के रूप में जाना जाता है स्लग

नियंत्रक नियंत्रक फ़ोल्डर के अंदर सीएस वर्ग है:

+0

यूआरएल आप किस तरह के अंत में देखना चाहते हो, यह एक /सूची/BrowseByStyleLevel/1/उच्चतर? या/कैटलॉग/ब्राउज़बेट स्टाइललेवल/उच्चतर? – liggett78

+0

आदर्श रूप से दूसरा, लेकिन मुझे प्रत्येक बार पाठ के आधार पर देखने के लिए आईडी की आवश्यकता है। – Kieron

+0

कृपया 'एएसपी.नेट एमवीसी 5' समाधान के लिए http://stackoverflow.com/a/20662188/1298685 देखें। –

उत्तर

47

इस समस्या को हल करने के दो चरण हैं। सबसे पहले, एक नया मार्ग बनाने या डिफ़ॉल्ट मार्ग बदलने के एक अतिरिक्त पैरामीटर स्वीकार करने के लिए:

routes.MapRoute( "Default", // Route name 
        "{controller}/{action}/{id}/{ignoreThisBit}", 
        new { controller = "Home", 
         action = "Index", 
         id = "", 
         ignoreThisBit = ""} // Parameter defaults) 

अब आप अपने यूआरआई के अंत में जो कुछ भी आप चाहते हैं टाइप करने के लिए कर सकते हैं और आवेदन यह ध्यान नहीं देगा।

जब आप लिंक प्रस्तुत करना है, तो आप 'दोस्ताना' पाठ जोड़ने की जरूरत:

<%= Html.ActionLink("Link text", "ActionName", "ControllerName", 
        new { id = 1234, ignoreThisBit="friendly-text-here" }); 
+1

हाय, अगर मैं इसे आज़माता हूं, तो एचटीएमएल से उत्पन्न यूआरएल। एक्शनलिंक इस तरह से बाहर आता है: /कैटलॉग/ब्राउजबीसब्यूजेक्ट/3?विषय = रसायन शास्त्र बजाय /सूची/BrowseBySubject/3/रसायन शास्त्र कोई भी विचार - मैं 'डिफ़ॉल्ट' मार्ग नीचे मार्ग से जोड़ दिया है, और 'BrowseBySubject को नाम बदल कर " – Kieron

+6

यह नहीं मिल रहा है इसका मतलब है कि। सही मार्ग। ऊपर दिए गए मार्ग को डिफॉल्ट करें (जो डिफॉल्ट को छुपाएगा, अगर कोई और उन्हें बाधा की तरह अलग नहीं करता है)। इस नए मार्ग को केवल तभी प्राप्त करने के लिए बाध्यता का उपयोग करें (उदाहरण के लिए, कैटलॉग/ब्राउजबीसब्जेक्ट पर, या जो भी हो नियम है) –

+0

+1 एक अच्छा संक्षिप्त उत्तर के लिए –

1

आप की तरह आप अपने खुद के मार्ग को परिभाषित कर सकते Global.asax

routes.MapRoute(
        "Default", // Route name 
        "{controller}/{action}/{id}", // URL with parameters 
        new { controller = "Home", action = "Index", id = ""} 
        // Parameter defaults) 

पर एक मार्ग है।

आप अपनी आईडी को परिभाषित कर सकते हैं - आपके द्वारा चुने गए नाम के साथ।

सिस्टम आपके क्रिया के मूल्य को पार करेगा। विधि विधि।

आप इस चरण के बारे में अधिक पढ़ सकते हैं: http://www.asp.net/learn/mvc/tutorial-05-cs.aspx

1

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

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", 
      action = "Index", 
      id = UrlParameter.Optional 
    } // Parameter defaults 
); 
routes.MapRoute("Place", "{controller}/{action}/{id}/{slug}", new { controller = "Place", action = "Details", id = UrlParameter.Optional,slug="" }); 
+0

उस नोट के लिए धन्यवाद, मार्ग मिलान क्रम वास्तव में अधिकांश ढांचे के रूप में मायने रखता है। – Dr1Ku

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