5

मैंने 'वेब' परिनियोजित परीक्षण के लिए, मेरे वेब होस्ट में केवल एक एमवीसी 4 .NET 4.0 ऐप तैनात किया है। गैर-मार्ग मार्ग ठीक काम कर रहे हैं, उदा। मेरामेरे बिन तैनात एमवीसी 4 ऐप में मेरे क्षेत्र रूटिंग के साथ क्या गलत है?

@Html.ActionLink("Register as a Client", "Register", "Account", new { registrationType = "Client"}, null) 

लिंक ठीक काम करता है, और लिंक सही पृष्ठ खोलता है। हालांकि, इस तरह एक क्षेत्र आधारित कार्रवाई के लिंक के साथ:

@Html.ActionLink("Authors", "Index", "Home", new { Area = "Author", registrationType = "Author" }, null) 

लिंक वास्तव में ब्राउज़र को प्रदान की गई कार्रवाई और नियंत्रक याद आ रही है, यानी

http://mylivedomain.com/?Area=Author&registrationType=Author 

यह ध्यान देने योग्य हो सकता है कि सीएसएस बंडलिंग एमवीसी 4 की सुविधा तैनाती के बाद काम नहीं कर रही थी, और मैं व्यक्तिगत स्टाइलशीट के क्लासिक शैली लिंक का उपयोग करने के लिए वापस लुढ़का।

शायद संबंधित: मेरा प्रश्न: Why is unmodified template code in my MVC4 app trying to register areas twice?

बस में: डिफ़ॉल्ट rouite के लिए क्षेत्र मार्ग मैपिंग से डिफ़ॉल्ट कार्रवाई निकाला जा रहा है इस समस्या का समाधान। VS2012 टेम्पलेट कोड में, प्रारंभ करने के लिए कोई डिफ़ॉल्ट नियंत्रक नहीं था।

+0

क्या आप अपने एक्शनलिंक() के अंत में 'नया {}' उपयोग करना भूल गए थे? http://stackoverflow.com/questions/2036305/how-to-specify-an-area-name-in-an-action-link –

+0

@NickDeVore, मैं इसके बजाय 'शून्य' का उपयोग कर रहा हूं, और यह इसके लिए काम करता है मुझे मेरी देव मशीन पर, और पिछली, एमवीसी 3, मेरी साइट के संस्करण पर काम किया जो मैं तैनात कर रहा हूं। – ProfK

+0

ठीक लगता है, मुझे अभी पता चला था कि दूसरा प्रश्न और उत्तर यह इंगित करता था कि अब इसकी आवश्यकता थी? वैसे भी, बस एक विचार। –

उत्तर

2

इसे जांचने का प्रयास करें। नियंत्रक कॉन्टेक्स्ट। रूटडेटा। डेटाटाकेन्स ["क्षेत्र"] आपके क्षेत्र की क्रिया विधियों में।

मुझे इसी तरह की समस्या के साथ एक स्थिति है जिसमें क्षेत्र का नाम बस एक खाली स्ट्रिंग था।

कार्रवाई विधि में डेटा टोकन सेट करना आपको त्वरित समाधान प्रदान कर सकता है लेकिन यह सवाल का जवाब नहीं देता है कि एमवीसी क्षेत्र का नाम क्यों सेट नहीं करता है।

2

आपके मामले में क्योंकि आप क्वेरी स्ट्रिंग में क्षेत्र निर्दिष्ट करते हैं, Global.asax.cs के मार्ग लागू होना चाहिए। मैं belive आप इस वहाँ की तरह कुछ है:

public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Default", 
      "{controller}/{action}/{id}", 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ).DataTokens.Add("area","Author"); 
    } 

इस कोड को घर/सूचकांक डिफ़ॉल्ट मार्ग बनाता है और यूआरएल में घर/सूचकांक को छोड़ देता है। यदि आप कुछ और पर नियंत्रक = "होम" बदलते हैं उदाहरण के लिए नियंत्रक = "होम 2" आप होम/इंडेक्स और नए डिफ़ॉल्ट रूट होम 2/इंडेक्स के लिए पूर्ण लिंक प्रदर्शित करेंगे। यदि आप उन्हें निर्दिष्ट करते हैं तो क्षेत्रों में डिफ़ॉल्ट मार्गों पर भी लागू होते हैं।

+0

स्पष्ट रूप से डेटा टोकन जोड़ने से "एक ही कुंजी वाला एक आइटम पहले ही जोड़ा जा चुका है।" अपवाद। – ProfK

1

अपने global.asax.cs में सुनिश्चित करें कि आप अपने Application_Start में इस लाइन कर दिया है:

AreaRegistration.RegisterAllAreas(); 

प्रत्येक क्षेत्र में, आप इस तरह AreaRegistration.cs कुछ होना चाहिए:

public class testAreaRegistration : AreaRegistration 
{ 
    public override string AreaName 
    { 
     get 
     { 
      return "test"; 
     } 
    } 

    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "test_default", 
      "test/{controller}/{action}/{id}", 
      new { action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 
+1

वह कोड प्रोजेक्ट/आइटम टेम्पलेट्स के हिस्से के रूप में स्वचालित रूप से जोड़ा जाता है। – ProfK

1

के साथ @ Html.ActionLink

उपयोग इस प्रारूप

@Html.ActionLink("Authors", "Index", "Home", new { Area = "Author", registrationType = "Author" }, new{}) 

मेरी समस्या हल हो गई।

0

क्या आप अपने किसी भी क्षेत्र में एमवीसी कोंट्रिब से पोर्टेबल एरिया पंजीकरण का उत्तराधिकारी बनते हैं?

हमारे पास पोर्टेबल एरिया से सभी पोर्टेबल एरिया रेग्रिस्ट्रेशन को हटाए जाने तक और केवल क्षेत्रीय पंजीकरण का उपयोग करने के लिए वापस लौटने तक एमवीसी 4 किसी भी अतिरिक्त पुस्तकालयों के बिना पोर्टेबल क्षेत्र पंजीकृत कर सकता है, तब तक हम वही लक्षण (स्थानीय रूप से काम करते हैं, सर्वर पर नहीं) का उपयोग करते थे।

+0

मैं एमवीसी कोंट्रिब का उपयोग नहीं कर रहा हूं। – ProfK

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