2013-06-18 6 views
18

में नियंत्रक मेरा क्षेत्र नीचे है। केवल संबंधित हिस्सा हाइलाइट किया गया है।उप फ़ोल्डर

enter image description here

मार्ग तालिका

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "SubFolder", // Route name 
     "SubFolder/ChildController", 
     new { controller = "ChildController", action = "Index" }, 
     new[] { "Practise.Areas.SOProblems.Controllers.SubFolder" }); 


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

This only works when the url is like this 
localhost:2474/SOProblems/ChildController/index 

This does not works when the url is like this 
localhost:2474/SOProblems/SubFolder/ChildController/index 

क्या आप मुझे बता सकते हैं कि याद आ रही है?

+0

"काम नहीं करता" का अर्थ वास्तव में क्या है? – TGlatzer

+0

@ Grumbler85 - आखिरी कोशिश की गई यूआरएल 404, –

+0

देता है बैकटिक केवल "उपफोल्डर/चाइल्ड कंट्रोलर" है? और जांचें कि उपफोल्डर के अंदर आप नामस्थान सही ढंग से सेट है। – TGlatzer

उत्तर

14

यह काम करता है नहीं है जब यूआरएल की तरह है इस स्थानीय होस्ट: 2474/SOProblems/सबफ़ोल्डर/ChildController/सूचकांक

यह सामान्य है। आप रूट पैटर्न इस तरह दिखते हैं: SubFolder/ChildController और SubFolder/ChildController/index नहीं। इसके अतिरिक्त आपने अपने मार्ग को गलत स्थान पर परिभाषित किया है। आपने इसे अपनी मुख्य मार्ग परिभाषाओं में परिभाषित किया है, न कि आपके क्षेत्र की रूट परिभाषाओं में। तो अपने मुख्य मार्गों से कस्टम मार्ग परिभाषा से छुटकारा पाने और SOProblemsAreaRegistration.cs फ़ाइल में जोड़ने (जो वह जगह है जहाँ अपने SOProblems मार्गों पंजीकृत किया जाना चाहिए):

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "SubFolderRoute", 
     "SOProblems/SubFolder/ChildController", 
     new { controller = "ChildController", action = "Index" }, 
     new[] { "Practise.Areas.SOProblems.Controllers.SubFolder" } 
    ); 

    context.MapRoute(
     "SOProblems_default", 
     "SOProblems/{controller}/{action}/{id}", 
     new { action = "Index", id = UrlParameter.Optional } 
    ); 
} 

इसके अलावा अपने मार्ग पैटर्न के बाद से (SOProblems/SubFolder/ChildController) नहीं है एक क्रिया नाम निर्दिष्ट करने की संभावना, आप इस नियंत्रक पर केवल एक ही क्रिया कर सकते हैं और यह आपके द्वारा पंजीकृत डिफ़ॉल्ट कार्रवाई होगी (index)।

, तो आप इस नियंत्रक के बारे में अधिक कार्यों के लिए और अभी तक सूचकांक डिफ़ॉल्ट आप अपने मार्ग पैटर्न में शामिल होना चाहिए कि होना चाहता था:

context.MapRoute(
    "SubFolder", 
    "SOProblems/SubFolder/ChildController/{action}", 
    new { controller = "ChildController", action = "Index" }, 
    new[] { "Practise.Areas.SOProblems.Controllers.SubFolder" } 
); 

दोनों ही मामलों में अपने मुख्य मार्ग परिभाषा उनके डिफ़ॉल्ट मानों के साथ रह सकता है :

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "Default", 
     "{controller}/{action}", 
     new { controller = "Home", action = "Index" } 
    ); 
} 
+2

"रजिस्टरएरिया" कहां से आता है? मैंने शून्य समाधान के साथ पूरे समाधान की खोज की। – usefulBee

+0

@usefulBee "RegisterArea" तब आता है जब विजुअल स्टूडियो एक नया _Add> क्षेत्र ... \ – Jasen

5

आपका नया मार्ग "सबफोल्डर" में मार्ग में एक क्रिया (आपके मामले में, "इंडेक्स") शामिल करने की संभावना शामिल नहीं है।

आपका नमूना URL

localhost:2474/SOProblems/SubFolder/ChildController/index 

की तरह एक मार्ग मैच के लिए प्रयास करने के लिए चाहता है:

"SubFolder/ChildController/{action}" 

लेकिन आप अपने मार्ग में "{कार्रवाई}" शामिल नहीं है, इसलिए यह जीत लिया ' अपने मार्ग से मेल नहीं खाते। फिर यह डिफ़ॉल्ट मार्ग की कोशिश करता है, जो स्पष्ट रूप से विफल रहता है।

अपने मार्ग के लिए "{कार्रवाई}" जोड़ने का प्रयास करें:

routes.MapRoute(
    "SubFolder", // Route name 
    "SubFolder/ChildController/{action}", 
    new { controller = "ChildController", action = "Index" }, 
    new[] { "Practise.Areas.SOProblems.Controllers.SubFolder" }); 

या ले "सूचकांक" अपने परीक्षण यूआरएल बंद।

+2

यह काम नहीं कर रहा है। –

2

किसी भी भविष्य के उपयोगकर्ता इसे करने के लिए देख रहे हैं; क्षेत्रों का उपयोग करने में देखो। यहां एक उपयोगी वीडियो है। Organizing an application using Areas

+0

स्कैफोल्ड करता है यह वही था जो मैं ढूंढ रहा था। धन्यवाद – MetalPhoenix

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