2012-01-04 7 views
5

जब मैं Html.ActionLink() यूआरएल निर्मित वांछित स्वरूप में नहीं है का उपयोग करें:?MVC रूटिंग Html.ActionLink साथ URL बनाने वाली आईडी = 1 के बजाय/आईडी

Html.ActionLink(Model.ProductCode, "Update", new { id = Model.ProductId }) 

इस URL बनाता

/Update?id=1 

जब मैं इस URL करना चाहते हैं:

/Update/1 

क्या मार्ग के विकल्प 2 URL बनाने? यह हमारी पसंदीदा यूआरएल शैली है।

दोनों URL काम करते हैं और सही पृष्ठ प्रदर्शित किया जाता है - केवल उपयोग/आईडी के लिए लेकिन हम चाहते हैं

Global.asax में MVC डिफ़ॉल्ट मार्ग दोनों URL संभालती

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

क्या आपके पास कोई ऐसा मार्ग है जो उससे मेल खाता है? – SLaks

+0

क्या आप वैश्विक.एक्सएक्स में मार्ग पोस्ट कर सकते हैं? – epignosisx

+0

दोनों मार्ग वर्तमान में मान्य हैं। मैं सिर्फ एक्शनलिंक को हमारे पसंदीदा प्रारूप में यूआरएल उत्पन्न करना चाहता हूं। –

उत्तर

3

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

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

जब मेरे डिफ़ॉल्ट मार्ग से ऊपर की जगहें, तो मुझे अपने यूआरएल में आईडी = 1 मिलता है। क्या आप पुष्टि कर सकते हैं कि यह एक्शनलिंक उस मार्ग के ऊपर किसी भी मार्ग से मेल नहीं खा रहा है जिसकी आप मिलान कर रहे हैं?

संपादित करें: नीचे दी गई यूआरएल

प्रभावित नहीं करता है हालांकि, यह अभी भी अन्य स्थितियों में UrlParameter.Optional उपयोग करने के लिए लाभप्रद हो सकता है। समृद्धि के लिए छोड़ना जब तक कि जमाव नियम अन्यथा कहता है।

नया यूआरएल पैरामीटर। वैकल्पिक मूल्य। यदि आप इस विशेष मान पर URL पैरामीटर के लिए डिफ़ॉल्ट मान सेट करते हैं, तो एमवीसी रूट मान शब्दकोश से उस कुंजी को निकालना सुनिश्चित करता है ताकि यह अस्तित्व में न हो।

मुझे लगता है कि आपको थोड़ा सा मार्ग समायोजित करने की आवश्यकता है। आईडी बदलें = "" आईडी पर = UrlParameter.Optional

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

इसी को हम डिफॉल्ट रूट और व्यवहार है कि आप देख रहे हैं के लिए उपयोग है कैसे हमारे अनुप्रयोगों व्यवहार करते है।

+0

यूआरएल अभी भी समाप्त होता है? Id = 1 –

+0

जेके - मैंने अभी यह सत्यापित करते हुए खुद को सत्यापित किया कि क्या मैं अपना एमवीसी ऐप बना सकता हूं? यूआरएल का उपयोग करना क्या आपके डिफ़ॉल्ट मार्ग से ऊपर कोई अन्य मार्ग है जो एमवीसी से मेल खा सकता है? क्या आपकी पूरी रूट टेबल देखना संभव होगा? – Tommy

0

This question/answer देखें।

एमवीसी का कौन सा संस्करण आप उपयोग कर रहे हैं? यदि आप एमवीसी 3 में हैं, तो null में गुजरने के लिए आपको Html.ActionLink() पर अपने कॉल में चौथा पैरामीटर जोड़ना होगा।

0

मैंने अभी इस पर ठोकर खाई है और जवाब देने का फैसला किया है। यह पता चला कि Url.Action() और Html.ActionLink() दोनों परिणामस्वरूप यूआरएल प्रारूपित करने के लिए रूट संग्रह में पहले मार्ग का उपयोग करते हैं। तो, RegisterRoutes में पहली मैप किया मार्ग() shoild हो:

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

बजाय "{नियंत्रक}/{कार्रवाई}/{आईडी}" की। मार्ग का नाम (यानी"डिफ़ॉल्ट") कोई फर्क नहीं पड़ता, केवल आदेश

0
routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 
संबंधित मुद्दे