2011-10-29 13 views
12

मैं एएसपीएनटी एमवीसी 2 का उपयोग कर रहा हूं और मार्गों के आधार पर स्थानीयकरण बना रहा हूं।एएसपी.नेट एमवीसी Url.Action और मार्ग नाम मूल्य

  1. मेरे मार्ग लगता है: {culture}/{controller}/{action}
  2. मैं अपने घर नियंत्रक पर जाएँ:

    <a href='<%= Url.Action("Prods","Products") %>' >Products</a> 
    <a href='<%= Url.Action("Index","About") %>' >About</a> 
    

पहले लिंक: en/Home/Index

  • मेरे घर नियंत्रक दृश्य अन्य नियंत्रकों के लिए एक लिंक जेनरेट कोड: /en/Products/Prods लेकिन दूसरा एक उत्पन्न करता है: /Home/Index

    मुझे समझ में नहीं आ रहा है कि Url.Action{culture} रूट पैरामीटर को छोड़ देता है जब मैं तर्क कार्रवाई में Index मानता हूं? मैं क्या गलत कर रहा हूं?

    मार्ग विन्यास:

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    
    routes.MapRoute("Login", // Route name 
           "{controller}/Index", // URL with parameters 
           new { controller = "Login", action = "Index" } // Parameter defaults 
           ).RouteHandler = new SingleCultureMvcRouteHandler(); 
    
    routes.MapRoute("Default", // Route name 
           "{controller}/{action}/{id}", // URL with parameters 
           new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
           );  
    

    फिर

    foreach (Route r in routes) 
    { 
        if (!(r.RouteHandler is SingleCultureMvcRouteHandler)) 
        { 
         r.RouteHandler = new MultiCultureMvcRouteHandler(); 
    
         r.Url = "{culture}/" + r.Url; 
    
         if (r.Defaults == null) 
         { 
          r.Defaults = new RouteValueDictionary(); 
         } 
    
         r.Defaults.Add("culture", "en"); 
    
         if (r.Constraints == null) 
         { 
          r.Constraints = new RouteValueDictionary(); 
         } 
    
         r.Constraints.Add("culture", new CultureConstraint(cultures)); 
        } 
    } 
    

    सभी के लिए धन्यवाद मदद

  • +0

    यदि आप अपनी पूर्ण मार्ग कॉन्फ़िगरेशन शामिल करते हैं तो समस्या को ढूंढना आसान है। –

    +0

    @ João Angelo प्रतिक्रिया के लिए धन्यवाद कृपया –

    +0

    @marc_s के लिए धन्यवाद, धन्यवाद, मैं इसे यहां सभी मार्गों के बाद जोड़ता हूं: r.Url = "{culture} /" + r.Url; –

    उत्तर

    41

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

    मेरी सलाह अगर आपके लिए Url.Action का उपयोग नहीं करना है और इसके बजाय Url.RouteUrl का उपयोग करें जो आपको उस मार्ग का नाम निर्दिष्ट करने की अनुमति देता है जिसका उपयोग यूआरएल बनाने के लिए किया जाना चाहिए।

    हमेशा मार्ग नामों का उपयोग करके आप अपने कोड को परिवर्तनों के लिए और अधिक मजबूत बनाते हैं, उदाहरण के लिए, आप बिना चिंता किए नए मार्ग जोड़ सकते हैं कि वे यूआरएल पीढ़ी के लिए अपना मौजूदा कोड तोड़ सकते हैं।

    1

    Url.Action लिंक बनाने के प्रयोजनों के लिए, Indexid टोकन के बिना कार्रवाई Login मार्ग से मेल खाती है। लॉगिन मार्ग सिंगलकल्चरएमवीसी रूटआउट हैंडलर का उपयोग करता है, इसलिए संस्कृति उन लिंक पर प्रीपेड नहीं की जाएगी।

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