13

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

मैं इस उत्तर का पालन कर रहा हूं here

यहाँ मेरी कस्टम मार्ग है:

routes.MapRoute(
    "MyRoute", 
    "{controller}/{action}/{param1}/{param2}", 
    new { 
     controller = "MyController", 
     action = "MyAction", 
     param1 = "", 
     param2 = "" // I have also tried "UrlParameter.Optional" here. 
    } 
); 

और मेरे कार्रवाई विधि हस्ताक्षर:

public ActionResult MyAction(string param1, string param2) 

अगर मैं यूआरएल की कोशिश http://[myserver]/MyController/MyAction/Test1/Test2 तो यह काम करता है जैसे मैं इसे करने की उम्मीद है, param1 = "Test1 साथ "और param2 =" test2 "

यदि मैं यूआरएल http://[myserver]/MyController/MyAction/Test1 यूआरएल आज़माता हूं तो दोनों पैरामीटर शून्य हैं।

उम्मीद है कि कोई मुझे बता सकता है कि मैं यहां क्या कर रहा हूं, क्योंकि मैं खो गया हूं।

+0

भविष्य से हाय - अब मार्ग विशेषता कोशिश - रास्ता रास्ता आसान है और कम त्रुटि प्रवण। – niico

उत्तर

13

मुझे लगता है कि आप नया मार्ग बनाया है और डिफ़ॉल्ट एक है कि से मिलता-जुलता है छोड़ दिया hep होगा। आपको अवगत होना चाहिए कि मार्गों का संग्रह पहले मिलान करने वाले मार्ग को खोजने के लिए किया जाता है। आप डिफ़ॉल्ट एक छोड़ दिया है तो अगर:

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

अपने मार्ग से ऊपर तो यह http://[myserver]/My/MyAction/Test1 करने के लिए अनुरोध की पूर्ति करेंगे और MyController.MyAction फोन और "पाठ 1" सेट id नामित पैरामीटर के लिए। जो असफल हो जाएगा क्योंकि यह क्रिया id नामित एक घोषित नहीं कर रही है।

routes.MapRoute(
      "Route", 
      "My/{action}/{param1}/{param2}", 
      new 
      { 
       controller = "My", 
       action = "MyAction", 
       param1 = "", 
       param2 = "" 
      }); 

यह सभी यातायात के लिए बाध्य करेगा इस मार्ग से मिलान करने के गर्त My कराई:

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

+1

कोई फर्क नहीं पड़ता कि मैं क्या करता हूं मुझे इस तरह के रास्ते में काम करने के लिए कई पैरामीटर नहीं मिल सकते हैं। यदि मैं 2 पैरामीटर बनाने का प्रयास करता हूं और 'My/MyAction/param1/param2' जैसे URL के साथ पृष्ठ का अनुरोध करता हूं तो मुझे 404 त्रुटि मिलती है। मैं क्या गलत कर रहा हूं? – DavidHyogo

1

हाय आप इस तरह अपने भगदड़ बनाने मुझे लगता है कि यह आप

routes.MapRoute(
       "Regis", // Route nameRegister 
       "Artical/{id}", // URL with parameters 
       new { controller = "Artical", action = "Show", id = UrlParameter.Optional } // Parameter defaults 
      ); 
0

इस

routes.MapRoute("MyRoute", 
       "myRoute/{param1 }/{param2 }", 
       new { controller = "MyController", action = "MyAction", param2 = UrlParameter.Optional }, 
       new { param2 = @"\w+" }); 

आप "UrlParameter.Optional" का उपयोग करके वैकल्पिक के रूप में एक पैरामीटर निर्दिष्ट और निर्दिष्ट डेटा प्रकार के साथ दूसरा एक कर सकते हैं इसका मतलब है अगर आप पूर्णांक मान तो डेटा प्रकार (@ "\ d +") पारित प्रयास करें और स्ट्रिंग के लिए मैंने ऊपर उल्लेख किया है।

नोट: पैरामीटर की अनुक्रम बहुत महत्वपूर्ण है वैकल्पिक पैरामीटर पिछले पर गुजरती हैं और डिफ़ॉल्ट मार्ग से पहले अपने नए मार्ग रजिस्टर Gloab.asax में होना आवश्यक है।

तो आप कार्रवाई लिंक की तरह

<a href="@Url.RouteUrl("MyRoute", new { param2 = "Test1",param1 = "Test2"})">Test</a> 

या एक पैरामीटर

<a href="@Url.RouteUrl("MyRoute", new { param2 = "Test1"})">Test</a> 

आप में साथ नियंत्रक

public ActionResult MyAction(string param2,string param1) 
{ 
    return View() 
} 
संबंधित मुद्दे