2010-08-13 15 views
5

मैं मार्टेन Balliauw के Domain Route वर्ग का उपयोग करने के MVC2 अनुप्रयोग में क्षेत्रों के लिए उप डोमेन मैप करने के लिए इतना है कि मैं जैसे URL हों और कोशिश कर रहा हूँ:रूटिंग मेरी क्षेत्रों में नियंत्रक की खोज है, लेकिन नहीं देखा गया

http://admin.mydomain.com/home/index 

के बजाय:

http://mydomain.com/admin/home/index 

अब तक, मैं केवल आंशिक सफलता मिली है। निष्पादन सही क्षेत्र में सही नियंत्रक को भेजा जा रहा है, लेकिन फिर यह सही दृश्य नहीं मिल सकता है। मैं निम्न त्रुटि प्राप्त कर रहा हूँ:

The view 'Index' or its master was not found. The following locations were searched: 
~/Views/AdminHome/Index.aspx 
~/Views/AdminHome/Index.ascx 
~/Views/Shared/Index.aspx 
~/Views/Shared/Index.ascx 

यह मेरे लिए इंगित करता है कि MVC केवल रूट विचारों फ़ोल्डर में देखने के लिए लग रही है और विचारों क्षेत्र के भीतर फ़ोल्डर नहीं। यदि मैं दृश्य दृश्य फ़ोल्डर में दृश्य दृश्य फ़ोल्डर से दृश्य की प्रतिलिपि बनाता हूं, तो पृष्ठ ठीक से प्रस्तुत करता है। हालांकि, एपीपी को क्षेत्र में विभाजित करने के उद्देश्य को पूरी तरह से हराया जाता है।

मैं के रूप में क्षेत्र के लिए मार्ग को परिभाषित कर रहा हूँ:

public class AdminAreaRegistration : AreaRegistration 
{ 
    public override string AreaName 
    { 
     get { return "Admin"; } 
    } 

    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.Routes.Add(
      "Admin_Default" 
      , new DomainRoute(
       "admin.localhost" 
       , "{controller}/{action}/{id}" 
       , new { controller = "AdminHome", action = "Index", id = UrlParameter.Optional } 
     )); 
    } 
} 

मैं क्यों यह क्षेत्र के भीतर नियंत्रक ठीक लग रहा है के रूप में उलझन में हूँ, लेकिन नहीं दृश्य।

उत्तर

3

ठीक है, मैंने इसे समझ लिया। एमवीसी 2 स्रोत कोड डाउनलोड करने और here के रूप में उल्लिखित मेरे समाधान में जोड़ने के बाद, मैंने एमवीसी कोड के माध्यम से कदम रखा। मैंने पाया कि क्षेत्रों के भीतर रूट्स IRouteWithArea इंटरफ़ेस को लागू करते हैं। यह इंटरफ़ेस रूटटाटा में 'एरिया' प्रॉपर्टी जोड़ता है, जो आश्चर्य की बात नहीं है, इसमें क्षेत्र का नाम शामिल है। मैंने इस इंटरफ़ेस को कार्यान्वित करने के लिए डोमेन रूट क्लास को संशोधित किया और कुछ अतिरिक्त अधिभारित कन्स्ट्रक्टर जोड़े जो इस अतिरिक्त पैरामीटर को ले गए, और अब यह ठीक वैसे ही काम करता है जैसा मैं चाहता था।

अब मेरे मार्ग के पंजीकरण के लिए कोड इस तरह दिखता है:

context.Routes.Add(
    "Admin_Default" 
    , new DomainRoute(
     "admin.mydomain" 
     ,"Admin" 
     , "{controller}/{action}/{id}" 
     , new { controller = "AdminHome", action = "Index", id = UrlParameter.Optional } 
     )); 
+0

+1 यह मुझे कुछ समय के लिए परेशान कर दिया। एक बार जब मुझे लगता है कि क्षेत्र में सही नियंत्रक मारा गया था, लेकिन यह गलत दृश्य प्रदान करता है, तो मुझे जल्दी से आपका प्रश्न और उत्तर मिल गया- अच्छी तरह से काम करता है। – Marijn

1

यदि आपके पास अपने क्षेत्रों और आपके डिफ़ॉल्ट मार्गों के बीच साझा नियंत्रक नाम हैं, और ऐसा लगता है कि आप करते हैं, तो आपको MapRoute पर कॉल करते समय नामस्थानों की पहचान करने की आवश्यकता हो सकती है।

उदाहरण के लिए, यदि आपका वेब आवेदन के शीर्ष-स्तरीय नाम स्थान Web, है Global.asax.cs फ़ाइल में RegisterRoutes विधि कुछ इस प्रकार दिखाई देगा:

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}",   
    new { action = "Index", id = UrlParameter.Optional }, 
    null, 
    new string[] { "Web.Controllers" } 
); 

और फिर AdminAreaRegistration.cs की RegisterArea moethod कुछ ऐसा दिखाई देगा यह:

context.MapRoute(
    "Admin_Default", 
    "Admin/{controller}/{action}/{id}", 
    new { action = "Index", id = UrlParameter.Optional }, 
    null, 
    new string[] { "Web.Areas.Admin.Controllers" } 
); 
+0

किस बारे में एक से अधिक मार्ग को जोड़ने? अगर आपको Admin_Default के अलावा अन्य मार्गों की आवश्यकता है तो क्या होगा? अगर आप अपने व्यवस्थापक क्षेत्र में अतिरिक्त अन्य नियंत्रकों और कार्यों के लिए मार्ग चाहते हैं तो क्या होगा? मैंने अभी तक किसी को भी उदाहरण दिखाने के लिए नहीं देखा है ... केवल क्षेत्रों के लिए इंगित डिफ़ॉल्ट मार्ग को संभालने के लिए उदाहरण दिखा रहा है। – PositiveGuy

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