2013-06-05 11 views
26

मैं अपने एमवीसी प्रोजेक्ट के प्रत्येक व्यूपेज पर एक यादृच्छिक छवि रखना चाहता था। तो मैंने एक विधि बनाई है जो आंशिक दृश्य देता है और उस लेआउट को साझा लेआउट पेज में कॉल करता है।नियंत्रक पर एक सार्वजनिक क्रिया विधि '..' नहीं मिली .. '

यह सही काम करता है जब मैं सही उपयोगकर्ता नाम और पासवर्ड से लॉगिन करने का प्रयास करता हूं। उपयोग में लॉग इन किया गया है और प्रत्येक पृष्ठ में एक यादृच्छिक छवि है। लेकिन जब मैं उपयोगकर्ता नाम और पासवर्ड का अमान्य संयोजन देता हूं। साझा लेआउट पेज को नियंत्रक नहीं मिला है जिसे मैं अपने @Html.Action से कॉल करना चाहता हूं और वास्तविक रूप से लॉगिन दृश्य को यादृच्छिक छवि के साथ त्रुटि संदेश 'उपयोगकर्ता नाम और पासवर्ड का अमान्य संयोजन' और अचूकता के साथ वापस किया जाना चाहिए।

InnerException:

{ "। एक सार्वजनिक कार्रवाई विधि 'RandomSponsor' नियंत्रक पर नहीं मिला था 'Project.WebUI.Controllers.HomeController'"}

मेरे में साझा Html.Action लेआउट।

@Html.Action("RandomSponsor", "Home") 

होमकंट्रोलर में विधि।

[HttpGet] 
[ChildActionOnly] 
public ActionResult RandomSponsor() 
{ 
    var model = service.getRandomSponsor(); 
    return PartialView("RandomSponsor", model); 
} 

getRandomSponsor विधि ठीक काम करता है, यह एक हमेशा एक यादृच्छिक स्ट्रिंग मान कि RandomSponsor.cshtml को देखने के लिए दिया जाता है देता है।

RandomSponsor.schtml

<img src="~/Content/Images/Advert/@(Model)" alt="a" /> 

मैं इस समस्या के लिए वेब खोज की, लेकिन एक समाधान नहीं मिला था (केवल छवि स्ट्रिंग है), किसी को भी इस एक का जवाब पता है? क्या यह HttpPost के HttpGet के साथ कुछ हो सकता है?

सम्मान।

+0

क्या आप अपनी रूट टेबल परिभाषा पोस्ट कर सकते हैं? (Global.asax में RegisterRoutes) और नियंत्रक परिभाषा जिसमें RandomSponsor() क्रिया है। –

+0

मैंने इस https://aspnetwebstack.codeplex.com/workitem/2295 –

+0

के लिए एक बग खोला, मुझे मोज़िला फ़ायरफ़ॉक्स 45 का उपयोग करके एक ही त्रुटि मिल रही थी। Google क्रोम 48.0.2564.116 मीटर के साथ एक ही चीज़ करना, समस्या समाप्त हो गई है। मेरे मामले में कुछ जावास्क्रिप्ट शामिल हैं और मुझे संदेह है कि यह समस्या है। – JayJay

उत्तर

59

यदि निष्पादन अनुरोध POST है, तो यह RandomSponsorHttpPost स्वीकार करने का तरीका खोजने का प्रयास करेगा। अगर समझ में आता है, तो आप HttpGet निकाल सकते हैं और यह चाल चलाना चाहिए।

यह भी अगर आप कॉल है कि एक पोस्ट (मैं एक दृश्य के लौटने के लिए एक कार्रवाई की थी, RenderAction बुला एक आंशिक दृश्य लौटने) के साथ शुरू की कई परतें होती हैं हो सकता है, तो RenderAction करने के लिए कॉल अभी भी एक POST पद्धति

के लिए दिखेगा
+7

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

+1

इस समस्या को ठीक करने के लिए '[HttpGet] 'विशेषता को कैसे हटाया जाए? मैं POET द्वारा विधि को रूट मान भेजना चाहता हूं, पोस्ट नहीं। – pt12lol

+0

ओह मुझे समाधान मिला। दृश्य POST द्वारा बुलाया गया था और उसमें GET द्वारा '@ Html.Action() 'लोडिंग को छोड़ दिया गया था। – pt12lol

-1

क्या आपने इसे Html.RenderAction के साथ एक शॉट दिया था? यह Html.Action के बाद आमतौर पर तेज़ होता है क्योंकि यह स्ट्रिंग बनाने के विरोध में सीधे प्रतिक्रिया स्ट्रीम में इंटरैक्ट करता है।

आप अधिक जानकारी के लिए निम्न विषयों देख सकते हैं:

नोट करने के लिए एक और बात है कि Html.Action या Html.RenderAction के लिए, आपके विचार होने की जरूरत नहीं है साझा फ़ोल्डर, यह केवल तभी आवश्यक है जब आप Html.Partial या Html.RenderPartial

का उपयोग करें
4

यह भी अगर आप कॉल है कि एक पोस्ट (मैं RenderAction बुला एक आंशिक दृश्य लौटने की दृष्टि लौटने के लिए एक कार्रवाई की थी) के साथ शुरू की कई परतें होती हैं हो सकता है, तो RenderAction करने के लिए कॉल अभी भी एक POST पद्धति

के लिए दिखेगा

बहुत इस समस्या यह है कि मैं यहाँ था के समान - How to solve "public action method 'methodActionName' was not found on controller 'controllerNameController'"

और तुम स्वीकार HTTP क्रिया प्राप्त करें और अपने विधि में जोड़ना GET अनुरोध में व्यापक पोस्ट अनुरोध की समस्या को ठीक करने के लिए जारी करना चाहते हैं

[AcceptVerbs (HttpVerbs.Get | HttpVerbs.Post)]

ध्यान रखें कि [HttpGet] में ही है के रूप में [AcceptVerbs (HttpVerbs.Get)]

0

कई अलग अलग PartialViews पर यह त्रुटि प्राप्त अचानक (नहीं के सभी उन्हें) जब MVCForum के एक इंस्टॉलेशन को अनुकूलित करते हैं। हमने त्रुटियों से संबंधित तरीकों या विचारों में कोई बदलाव नहीं किया था, इसलिए यह वास्तव में निराशाजनक था कि वे क्यों टूटे थे।

इस पोस्ट और अन्य पर अन्य समाधानों की कोशिश करने के बाद, किए गए परिवर्तनों के माध्यम से वापस चला गया और त्रुटियों को रोकने के लिए क्या हुआ था कि हमने आईआईएस में बाइंडिंग को दूसरे डोमेन में बदल दिया था जिसमें 'लोअर केस यूआरएल लागू करें' यूआरएल था रीवाइट नियम सक्षम है।

जब हमने प्रबल लोअरकेस नियम को अक्षम कर दिया, तो त्रुटियां रुक गईं और साइट के रूप में काम किया गया था। यह एक यूआरएल रिवाइट मुद्दा नहीं है (मुझे नहीं लगता) क्योंकि हम बिना किसी त्रुटि के www का उपयोग करने में सक्षम हैं। यह एक लोअरकेस पुनर्लेख मुद्दा है। इससे कोई फर्क नहीं पड़ता कि हमारे पास www नियम से पहले या उसके बाद लोअरकेस नियम था।

यह समाधान शायद इस त्रुटि के कई मामलों पर लागू नहीं होता है, लेकिन यह हमारे लिए काम करता है। उम्मीद है कि किसी और को इस तरह के एक साधारण फिक्स से फायदा हो सकता है।

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