2010-09-21 18 views
29

एमवीसी में एक साधारण कार्य, कभी-कभी मुश्किल चुनौती बन जाता है।क्षेत्र के बाहर एएसपी.नेट एमवीसी एक्शनलिंक

ठीक है, मेरे पास व्यवस्थापक नामक एक क्षेत्र है। मेरे पास इस क्षेत्र में साझा की गई निर्देशिका के अंदर "निषिद्ध" नाम का एक पृष्ठ है।

लक्ष्य सरल है: मुझे एक HTML.ActionLink बनाने की आवश्यकता है जो होम पेज पर लौटने के लिए एक लिंक उत्पन्न करता है जो व्यवस्थापक क्षेत्र व्यवस्थापक क्षेत्र है।

तो मैं कोशिश करूँगा, <%= Html.ActionLink("Back","Index",new {controller="Home"})%>, और इसकी उत्पन्न:

http://localhost/Admin/Home/Index 

इसका गलत मैं चाहता हूँ:

http://localhost/Home/Index 

कैसे मैं डिफ़ॉल्ट नियंत्रक संरचना करने के लिए एक क्षेत्र से एक लिंक बना सकते हैं?

उत्तर

51

इस प्रयास करें:

<%= Html.ActionLink("Back", "Index", "Home", new { area = "" }, null) %> 

क्षेत्रों का उपयोग करते समय, आप हमेशा क्षेत्र अपने अपने ActionLinks में के रूप में ऊपर एक मार्ग मूल्य जोड़कर बुला रहे हैं निर्दिष्ट करना चाहिए, लिंक क्षेत्र के बाहर है (आपके मामले में के रूप में), बस क्षेत्र के लिए एक खाली पैरामीटर का उपयोग करें।


एक अच्छा विस्तार है कि मैं किसी भी ASP.NET MVC परियोजना (T4MVC) में आवश्यक लगता है नहीं है। यह आपके एक्शनलिंक्स को बहुत साफ दिखता है और यह त्रुटियों के खिलाफ उनकी सुरक्षा करता है।

तो उपरोक्त कोड कुछ इस तरह दिखेगा:

<%= Html.ActionLink("Back", MVC.Home.Index()) %> 

और जब एक क्षेत्र का उपयोग कर:

<%= Html.ActionLink("Some Link", MVC.Admin.SomeController.SomeAction()) %> 

यह codeplex here

पर MvcContrib परियोजना का एक हिस्सा है आपको इसका इस्तेमाल करने पर विचार करना चाहिए।

+0

मैंने मुश्किल पाने की कोशिश की और इसे मेरे क्षेत्र पंजीकरण पंजीकरण मार्ग में जोड़ा, लेकिन यह काम नहीं किया। मैनुअल सीधा क्षेत्र = "" एक नियमित क्रिया लिंक में काम करता है। धन्यवाद। – kmehta

+1

और फ़ॉर्म के लिए यह है कि आप इसे कैसे करेंगे। 'एचटीएमएल.बिनगॉर्मफॉर्म (" लॉगऑफ "," खाता ", नया {क्षेत्र =" "}, फॉर्मएम विधि.पोस्ट, नया {आईडी =" लॉगआउटफॉर्म "}))' –

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