2011-01-26 14 views
14

ओवरराइड करने के लिए कोई उपयुक्त विधि नहीं मिली है, मैं RazorViewEngine का उपयोग कर एक एमवीसी 2 साइट को एमवीसी 3 में परिवर्तित करने की कोशिश कर रहा हूं।एमवीसी 3/रेजर: cshtml.Execute() ':

मैंने अपने प्रोजेक्ट को अपग्रेड करने के लिए this tool का उपयोग किया औरको मेरे .aspx दृश्यों को रेजर में परिवर्तित करने के लिए उपयोग किया। टेलीरिक टूल ने मेरे लेआउट के शीर्ष पर @inherits लाइन डाली (ViewMasterPage से विरासत)।

जब मैं एक पृष्ठ है कि इन लेआउट में से एक का इस्तेमाल किया भागने की कोशिश की, मैं त्रुटि मिली:

...cshtml.Execute(): no suitable method found to override

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

मैं दृश्य स्टूडियो को बंद करने की कोशिश की है, अस्थायी फ़ाइलों को हटाने, आदि

उत्तर

18

यह पता चल - निम्न अनुभाग रेजर के लिए web.config में होने की जरूरत है - मैं Views निर्देशिका में web.configs में यह था, लेकिन नहीं rootweb.config में:

<system.web.webPages.razor> 
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <pages pageBaseType="System.Web.Mvc.WebViewPage"> 
     <namespaces> 
     <add namespace="System.Web.Mvc" /> 
     <add namespace="System.Web.Mvc.Ajax" /> 
     <add namespace="System.Web.Mvc.Html" /> 
     <add namespace="System.Web.Routing" /> 
     </namespaces> 
    </pages> 
    </system.web.webPages.razor> 
+0

+1 अच्छी तरह से मिला! – Rob

+11

वह कॉन्फ़िगरेशन अनुभाग तकनीकी रूप से सही है, लेकिन आपको इसकी रूट वेब.कॉन्फिग में इसकी आवश्यकता नहीं है। इसे ~/Views/Web.config में रखें, लेकिन बस "System.Web.Mvc.ViewPage" के बजाय, अपने पेजबेसटाइप = "System.Web.Mvc.WebViewPage" सुनिश्चित करें। मैंने बस उस मामूली परिवर्तन के साथ अपने आवेदन में एक ही त्रुटि का समाधान किया। – MikeWyatt

+0

@ माइकवाइट मैं अब इस मुद्दे से निपट रहा हूं, और अभी आपके सुझाव की कोशिश की है, लेकिन मुझे निम्न त्रुटि मिलती है: System.Web.Mvc.WebViewPage को यहां अनुमति नहीं है क्योंकि यह System.Web.UI.Page का विस्तार नहीं करता है। कोई विचार क्या मैं कर सकता हूँ? धन्यवाद! – dizzwave

0

आप अभी भी अपने MVC2 परियोजना की एक बैकअप मैं उपकरण माइक्रोसॉफ्ट इस के लिए MSDN पर जारी किया गया का उपयोग कर की कोशिश करेंगे है। अधिक जानकारी के लिए this लिंक देखें। एमवीसी 3 जारी होने पर स्कॉट गुथरी ने अपने ब्लॉग पोस्ट में इसके बारे में कुछ लिखा था, आप लेख here पढ़ सकते हैं।

मुझे डर है कि मैं आपको इसका सीधा समाधान नहीं दे सकता। लेकिन आपके द्वारा उपयोग किए जाने वाले टेलरिक से रूपांतरण सॉफ़्टवेयर में एक बग या समस्या की तरह लगता है।

+0

आह, हाँ, वास्तव में वह उपकरण है जिसका मैंने उपयोग किया था। मैंने फिर एएसपीएक्स विचारों को रेज़र में बदलने के लिए टेलीरिक टूल का उपयोग किया। मैं अपनी पोस्ट अपडेट करूंगा। – sydneyos

+0

@ सिडनीनोस। क्या आप एक कोड उदाहरण पोस्ट कर सकते हैं कि आपकी सीएसएचटीएम फाइल अब कैसी दिख रही है? – Rob

5

यहां कुछ चीजें हो सकती हैं। सुनिश्चित करें कि आप इन दिशानिर्देशों का पालन कर रहे हैं

  • आपके पास @inherits आपके विचारों में निर्देश नहीं हैं। जब तक कि आप एक कस्टम व्यू पेज बेस क्लास का उपयोग नहीं कर रहे हैं, वे अनावश्यक हैं। दृढ़ता से टाइप किए गए विचारों के लिए आपको मॉडल प्रकार निर्दिष्ट करने के लिए @model निर्देश का उपयोग करना चाहिए। साप्ताहिक टाइप किए गए विचारों के लिए आपको कुछ भी चाहिए नहीं।
  • एएसपीएक्स मास्टर पेज (या रेजर लेआउट के साथ एएसपीएक्स पेज) के साथ रेजर दृश्यों को मिश्रित न करें, क्योंकि वे आसानी से साथ काम नहीं करते हैं। इसमें आपके सभी क्रिया विधियों की जांच शामिल है, जहां आपके पास return View("ViewName", "MasterName") जैसे कोड हैं क्योंकि इससे विवादित टेम्पलेटिन तकनीकों का उपयोग भी हो सकता है।
+0

धन्यवाद - मेरे पास @inherits निर्देश नहीं हैं और मैं @ मॉडल निर्देशों का उपयोग कर रहा हूं। लेआउट में परिवर्तित सभी मास्टर पेज। – sydneyos