2010-02-22 42 views
13

मैं इस तरह से ASP.NET MVC 2 RC2 में Html.RenderAction उपयोग करने के लिए कोशिश कर रहा हूँ "मार्ग तालिका में कोई मार्ग आपूर्ति किए गए मान से मेल खाता है":Html.RenderAction का कारण बनता है

मेनू Controler में:

[ChildActionOnly] 
public ActionResult ContentPageMenus() 
{ 
    var menus = _contentPageMenuRepository.GetAll().WithCulture(CurrentCulture); 
    return PartialView(menus); 
} 

और (होम नियंत्रक के सूचकांक कार्रवाई के लिए) मेरे सूचकांक ध्यान में रखते हुए:

<% Html.RenderAction("ContentPageMenus", "ContentPageMenu");%> 

लेकिन मैं हमेशा इस त्रुटि संदेश मिलता है: मार्ग तालिका में कोई मार्ग आपूर्ति किए गए मान से मेल खाता है।

उत्तर

0

क्या आपने अपने आवेदन के लिए कोई अतिरिक्त मार्ग पंजीकृत किया है?

+1

मुझे समस्या मिली। मैं हमेशा {नियंत्रक}/{action} मार्ग को हटाता हूं और यूआरएल की तरह लोअरकेस आरईएसटी के साथ अपने सभी मार्गों को कस्टमाइज़ करता हूं। लेकिन Html.RenderAction के लिए ऐसा सामान्य मार्ग होना जरूरी है। मैंने कहा कि मेरे मार्ग सूची के अंत तक सामान्य मार्ग और यह काम किया। –

5

आपके नियंत्रक का नाम क्या है? डिफ़ॉल्ट रूप से निम्नलिखित आपके मार्गों के साथ होता है।

आपके रेंडरएक्शन विधि में निर्दिष्ट नियंत्रक नाम उस नाम पर "नियंत्रक" के साथ खोजा गया है।

उस नियंत्रक में कार्य विधि को कॉल किया जाता है और एक दृश्य लौटाया जाता है।

तो, अपने कोड को देखकर बाद निम्न होगा

  1. आप एक नियंत्रक "ContentPageMenuController" कहा जाता हो जाना चाहिए था
  2. आप एक एक्शन "ContentPageMenus" जो आप
  3. आपके पास बुलाया जाना चाहिए था ContentPageMenus()

यह माना जा रहा है कि आपने डिफ़ॉल्ट रूटिंग को नहीं बदला है और नए जोड़े को नहीं जोड़ा है जो आपके आर को प्रभावित करेंगे आउटिंग

+9

मुझे समस्या मिली। मैं हमेशा {नियंत्रक}/{action} मार्ग को हटाता हूं और यूआरएल की तरह लोअरकेस आरईएसटी के साथ अपने सभी मार्गों को कस्टमाइज़ करता हूं। लेकिन Html.RenderAction के लिए ऐसा सामान्य मार्ग होना जरूरी है। मैंने कहा कि मेरे मार्ग सूची के अंत तक सामान्य मार्ग और यह काम किया। –

+0

वाह! इस सवाल के शीर्षक में बताए गए त्रुटि संदेश के कारण मुझे यह समझने में घंटों लगे। यहां टिप्पणी ने मुझे हल करने में मदद की! धन्यवाद! – Roger

+1

मैं एट्रिब्यूट रूटिंग प्रोजेक्ट का उपयोग करता हूं, और यदि यह डिफ़ॉल्ट मार्ग से दूर करने का कोई तरीका था तो यह बहुत अच्छा होगा लेकिन अभी भी रेंडरएक्शन सही तरीके से काम कर रहा है! अन्यथा मैं कभी-कभी एक गलत टाइप किए गए एक्शनलिंक सहायक द्वारा जला दिया जाता है जिसके परिणामस्वरूप डिफ़ॉल्ट पर आधारित एक खराब यूआरएल होता है, जहां मैं वास्तव में अपवाद पसंद करता हूं! –

0

आप मजबूत टाइप की गई विधि का उपयोग क्यों नहीं करते?

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

<% Html.RenderAction<ContentPageMenusController>(x => x.ContentPageMenus()); %> 

आप वास्तव में वर्ग के नाम को भरने के लिए है।

+0

क्या यह एएसपी.नेट एमवीसी 2 आरसी 2 में उपलब्ध है? मैं यह नहीं देख सकता –

+0

हाँ यह है ... मैंने इस कोड को – vintem

+3

का उपयोग करके एक प्रोजेक्ट से लिया है। ऐसा लगता है कि यह विधि वास्तव में एमवीसी फ्यूचर्स से है: http://forums.asp.net/p/1565646/3901280.aspx – StriplingWarrior

11

एमवीसी फ्यूचर्स उन कार्यों के प्रतिपादन की अनुमति देने के लिए प्रयुक्त होते थे जिनके पास कोई मार्ग नहीं था। यह एएसपी.नेट एमवीसी 2 में बदल गया है।

यदि आप काम करने के लिए रेंडरएक्शन चाहते हैं और अपना मार्ग छिपाना चाहते हैं तो यह सार्वजनिक रूप से सुलभ नहीं है।

  1. globals.asax.cs में अपनी कार्रवाई के लिए एक मार्ग जोड़ें।
  2. [ChildActionOnly] विशेषता के साथ अपनी कार्रवाई को सजाने के लिए।
4

मुझे एक ही त्रुटि थी। यह डिफ़ॉल्ट मार्ग को बदलकर हुआ था; स्पष्ट रूप से यह स्पष्ट रूप से रूट नाम "डिफ़ॉल्ट" के लिए खोज करता है।

7

इस तरह एक तिहाई पैरामीटर जोड़ा जा रहा है मेरे लिए समाधान (उस्तरा में) था:

@{Html.RenderAction("ActionName", "ControllerName", new { area = string.Empty });}

+0

मेमेट - क्या आप कृपया मुझे बताएं कि यह समाधान ठीक है या नहीं और यह किसी अन्य स्थान पर प्रभावित नहीं होगा? - यह मेरी समस्या हल करता है –

0

मैंने पहले इस मुद्दे पड़ा है, यह था, जहां मार्ग नियंत्रक शामिल नहीं किया।

  context.MapRoute(
      "Route_default", 
      "Stuff/{action}/{id}", 
     new { action = "Index", id = UrlParameter.Optional } 
     ); 

मैं अभी भी क्षेत्र के बाद सीधे कार्रवाई करने में सक्षम होना चाहता था इसलिए मैंने निम्न मार्ग को जोड़ा।

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

     context.MapRoute(
      "Route_Controller", 
      "Stuff/{controller}/{action}/{id}", 
      new { controller = "Something", action = "Index", id = UrlParameter.Optional } 
     ); 
संबंधित मुद्दे