2011-07-20 15 views
10

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

तो अगर मैं एक क्षेत्र 'कुछ' कहा जाता है में एक साधारण 'बात' नामक नियंत्रक है और मैं निम्नलिखित है ...

public ActionResult Index() 
{ 
    return View("Index"); 
} 

कार्रवाई सही ढंग से क्रियान्वित किया जाता है, लेकिन MVC नहीं मिल रहा है दृश्य और मैं कह रहा

दृश्य 'सूचकांक' या यह मास्टर है की तरह कुछ नहीं मिला था एक संदेश मिलेगा ... और यह मुझे सभी की खोज स्थानों, जो हो जाएगा दिखाएगा

~/दृश्य/बात/अनुक्रमणिका.cshtml ~/दृश्य/साझा/अनुक्रमणिका.cshtml

आदि, आदि, लेकिन यह

~/कुछ/दृश्य/बात/Index.cshtml

कोई भी विचार में मैं गलत क्या कर रहा हूँ पर नहीं दिखता है?

+0

क्या आपके पास सही क्षेत्र में आपकी क्षेत्र पंजीकरण फाइलें हैं? –

+0

क्या आपने इसे व्यूनाम के बिना आजमाया? मानक द्वारा actionmethod का नाम दृश्यनाम के रूप में उपयोग किया जाता है। वापसी देखें(); – Tobias

उत्तर

17

ठीक है, मेरे अपने प्रश्न, लेकिन कोई जवाब देने के लिए माफी वास्तव में मुझे जवाब दिया:

आप किसी अन्य क्षेत्र से या जड़ से लिंक को कॉल करते हैं तो आप कार्रवाई कड़ी में क्षेत्र स्थापित करने के लिए मुझे इसकी तलाश थी। ऐसा लगता है कि मेरी समस्या कस्टम रूटिंग के साथ थी।

समस्या को फिर से बनाने के लिए, मैंने एक खाली एमवीसी 3 प्रोजेक्ट बनाया और 'कुछ' नामक एक क्षेत्र और 'थिंग' नामक उस क्षेत्र में एक नियंत्रक जोड़ा। चीज पर मैंने एक इंडेक्स एक्शन बनाया जो बस एक दृश्य लौटा। इसके बाद मैंने इंडेक्स व्यू को ~/क्षेत्र/कुछ/दृश्य/थिंग/इंडेक्स.cshtml

ग्रेट में जोड़ा। इसलिए जब मैं/कुछ/थिंग/इंडेक्स हिट करता हूं तो यह दृश्य सही तरीके से देता है।

अब जाएं और वैश्विक मार्ग पर जाएं।asax कि इस तरह दिखता है: - MVC दृश्य नहीं मिल रहा है

routes.MapRoute(
       "Custom", // Route name 
       "Bob", // URL with parameters 
       new { area = "Some", controller = "Thing", action = "Index" } 
       ); 

अब मैं जब करने के लिए/बॉब मैं त्रुटि मैंने कहा मिल जाएँ। इस समस्या को ठीक करने के लिए मुझे ग्लोबल.एक्सएक्स के बजाय कुछ एरिया पंजीकरण श्रेणी में इस मार्ग को पंजीकृत करना पड़ा। मुझे 'क्षेत्र' संपत्ति की भी आवश्यकता नहीं थी, इसलिए ऐसा लगता है।

context.MapRoute(
     "Custom", // Route name 
     "Bob", // URL with parameters 
     new { controller = "Thing", action = "Index" } 
     ); 
+4

मुझे अपने मार्ग पंजीकरण को केंद्रीकृत करने की कोशिश के तरीके के परिणामस्वरूप एक ही समस्या थी। यह पता चला कि मैं भी एरिया रेग्रिस्ट्रेशन कॉन्टेक्स्ट के बजाय रूटकोलेक्शन पर मैप रूट को कॉल कर रहा था। – stephen

1

Global.asax में निम्नलिखित मार्ग को जोड़ने का प्रयास करें:

context.MapRoute(
       "default", 
       "Some/{controller}/{action}/", 
       new { controller = "Thing", action = "Index"} 
      ); 
+0

ऐसा प्रतीत होता है कि मुझे एमवीसी रूटिंग के बारे में पर्याप्त जानकारी नहीं है। धन्यवाद –

+0

आपका स्वागत है :) –

-1

यह में नहीं लग रही हूँ * ~ कुछ/ * दृश्य ..... डिफ़ॉल्ट रूप से (मुझे यकीन है कि आप कैसे मजबूर कर सकते हैं नहीं कर रहा हूँ वह या तो), सम्मेलन ~/Views/...... होगा, ताकि दृश्य को देखने के लिए सही जगह होगी। यदि आप चाहते हैं कि यूआरएल "कुछ" हो, तो आप रूटिंग बदल सकते हैं इसे संभालने के लिए।

+1

यह सही नहीं हो सकता है ... जब आप 'नया क्षेत्र जोड़ें' चुनते हैं तो यह क्षेत्र में 'व्यू' फ़ोल्डर बनाता है? –

+0

@ एडी.Net - एमवीसी क्षेत्र शामिल होने पर आपने जो कहा वह सही नहीं है। मेरे पास ~/क्षेत्र/समर्थन/दृश्य/होम/* में विचार हैं और जब तक क्षेत्र सही ढंग से पंजीकृत है, तब तक उस स्थान से दृश्य का उपयोग किया जाता है। –

1

सुनिश्चित करें कि आपके पास "कुछ" क्षेत्र पर कुछ एरिया रेगेस्टेशन.cs नामक फ़ाइल है।

public class SomeAreaRegistration : AreaRegistration 
{ 
    public override string AreaName 
    { 
     get 
     { 
      return "Some"; 
     } 
    } 

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

मेरे पास वास्तव में ऐसा है ... –

+0

मुझे लगता है कि आपको इंडेक्स व्यू नहीं, एक और कार्रवाई दिखाने के लिए ** रीडायरेक्ट टॉक्शन ("माईएक्शन") ** विधि का उपयोग करना चाहिए। यदि आप इंडेक्स पर वापस जाना चाहते हैं, तो आपको केवल ** रिटर्न व्यू(); ** का उपयोग करना चाहिए। –

1

क्षेत्रों का उपयोग करते समय, स्थान पर अपने index.cshtml डाल ~/क्षेत्रों/(द्वारा कुछ/दृश्य/बात/Index.cshtml

0

आप जाँच कर दी: इस फाइल को निम्नलिखित की तरह कुछ को शामिल करना चाहिए सेटिंग ब्रेकपॉइंट) अगर नियंत्रक विधि कहा जाता है?

आपके द्वारा सूचीबद्ध किए गए पृष्ठ जहां दृश्य खोजा गया है, वे "कुछ" क्षेत्र में नहीं हैं। आप कहां से लिंक कहां से कॉल करते हैं?

@Html.ActionLink("Go To Some/Thing", "Index", "Thing", new {area="Some"}, null) 
+0

हाँ मैंने किया - यह निश्चित रूप से नियंत्रक को मार रहा है –

0

बस यहां एक और समाधान जोड़ने के लिए। मुझे यह समस्या भी थी, लेकिन मेरा ग्लोबल.एक्सएक्स सीएस

इस मार्ग को हटाने से इस मुद्दे को हल करने में एक विवादित "पकड़ो" मार्ग होने का कारण था।

4

अपने नियंत्रक क्षेत्र रूप में एक ही नाम है, तो अपने नियंत्रक से पहले यह क्षेत्र रूट की जाँच करता है और इसलिए जड़/विचारों में देखने के लिए के बजाय में दिखेगा डिफ़ॉल्ट आधार मार्ग {controller}/{action} द्वारा उठाया हो जाएगा क्षेत्र/विचार या तो क्षेत्र या नियंत्रक का नाम बदलना इसे हल करेगा।

+0

विशेष रूप से नियंत्रक का नाम शामिल करने के लिए क्षेत्र पंजीकरण में मार्ग बदलना नियंत्रक का नाम बदलने के बिना भी समस्या का समाधान करेगा। –