रेज़र एचटीएमएल हेल्पर एक्सटेंशन्स (या विचारों के अन्य नामस्थान) नहीं मिले


167

डनो अगर यह पीआर या बीटा में हो रहा था, लेकिन अगर मैं एक एक्सटेंशन विधि बनाता हूं HtmlHelper, तो यह रेजर द्वारा संचालित पेज में मान्यता प्राप्त नहीं है:

namespace SomeNamespace.Extensions {
    public static class HtmlExtensions {
        public static string Foo(this HtmlHelper html) {
            return "Foo";
        }
    }
}

मैंने इसे <Namespaces>अनुभाग में जोड़ा Web.config:

<pages>
  <namespaces>
    <add namespace="System.Web.Mvc" />
    <!-- snip -->
    <add namespace="SomeNamespace.Extensions"/>
  </namespaces>
</pages>

लेकिन यह पृष्ठ को देखने का प्रयास करते समय एक जटिल त्रुटि फेंकता है:

@Html.Foo()

अगर मैं WebForms के साथ पृष्ठ को फिर से बनाता हूं तो यह ठीक काम करता है। क्या बात है?

वैकल्पिक हल

यदि मैं @using SomeNamespace.Extensionsअपने रेज़र दृश्य में शामिल करता हूं, तो यह काम करता है, लेकिन मैं इसके बजाय बहुत कुछ करूंगाWeb.config


2
यहां तक ​​कि वर्कअराउंड मेरे लिए काम नहीं करता है। विस्तार विधि इंटेलीजेंसी में दिखाई देगी, लेकिन रनटाइम के दौरान एक संकलित त्रुटि फेंकता है।
क्लार्क

@ मनोरंजक वर्कअराउंड के लिए +1। मैं इसे अपने मामले में पसंद करता हूं।
कैंट

@ एकल दृश्य के लिए प्रयोग करना ठीक है। लेकिन कई विचारों के लिए कोड प्रबंधन एक मुद्दा बन जाता है।
रहटुर

जवाबों:


274

बीटा के बाद से, रेजर विश्व स्तर पर नाम स्थान के आयात को परिभाषित करने के लिए एक अलग कॉन्फ़िगरेशन अनुभाग का उपयोग करता है। अपनी Views\Web.configफ़ाइल में आपको निम्नलिखित जोड़ना चाहिए:

<configSections>
  <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
    <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  </sectionGroup>
</configSections>

<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" />
      <!-- Your namespace here -->
    </namespaces>
  </pages>
</system.web.webPages.razor>

अपने आप सही कॉन्फ़िगरेशन मान सुनिश्चित करने के लिए MVC 3 अपग्रेड टूल का उपयोग करें ।

ध्यान दें कि संपादक द्वारा उठाए जाने वाले परिवर्तनों के लिए आपको फ़ाइल को बंद करना और फिर से खोलना पड़ सकता है।


1
क्या मुझे एक विधानसभा संदर्भ याद आ रहा है? यह System.Web.Mvc.WebViewPage या किसी भी प्रकार के विन्यास अनुभाग में पहचान नहीं करता है।
क्लार्क

4
मुझे> System.Web.WebPages.Razor में एक सन्दर्भ जोड़ना पड़ा और इसने इसे हल कर दिया।
TWith2Sugars

4
यह मेरे लिए काम नहीं कर रहा है। मैं एमवीसी 3 आरसी का उपयोग कर रहा हूं, मैंने अपने नाम फ़ोल्डर में web.config में अपना नाम स्थान जोड़ा। अभी भी रेज़र पेज में मेरे एक्सटेंशन नहीं देखे जा सकते। ईवेंट डालने @use <extensionname> काम नहीं करता है। @ TWith2Sugars मुझे System.Web.WebPages.Razor भी नहीं मिल रहा है, मैंने System.Web.Razor को जोड़ा, लेकिन मदद नहीं की। मैं वास्तव में यहाँ फंस गया हूँ
freddoo

31
+1 मुझे अपडेट देखने के लिए फ़ाइल खोलने और बंद करने के लिए कह रहा है।
अमीर

26
यह इंगित करने के लिए धन्यवाद कि यह रूट web.config नहीं है, लेकिन दृश्य फ़ोल्डर में web.config है!
G-Wiz

11

जैसा कि स्वीकृत उत्तर बताता है कि आप कॉन्फ़िगर फ़ाइल के अनुभाग में जोड़कर सभी दृश्यों में "उपयोग" कर सकते हैं।

लेकिन एक दृश्य के लिए आप बस इस्तेमाल कर सकते हैं

@use SomeNamespace.Extensions


6

रेजर का उपयोग करके एमवीसी 4 एप्लिकेशन में मेरी यही त्रुटि थी। Web.config फ़ाइलों को साफ करने के प्रयास में, मैंने दो webpages:कॉन्फ़िगरेशन मान निकाले :

<appSettings>
  <add key="webpages:Version" value="2.0.0.0" />
  <add key="webpages:Enabled" value="false" />

एक बार जब मैंने इन कॉन्फ़िगरेशन मानों को पुनर्स्थापित कर लिया, तो पृष्ठ सही तरीके से संकलित हो जाएंगे और .Partial()एक्सटेंशन विधि के बारे में त्रुटियां गायब हो गईं।


5

मेरे पास वीएस 2015 में यह मुद्दा था। निम्नलिखित ने मेरे लिए इसे हल किया:

एप्लेटिंग में "वेबपेज: संस्करण" ढूंढें और इसे संस्करण 3.0.0.0 में अपडेट करें। मेरा web.config था

<add key="webpages:Version" value="2.0.0.0" />

और मैंने इसे अपडेट किया

<add key="webpages:Version" value="3.0.0.0" />

3

मैंने पाया कि प्रत्येक दृश्य फ़ोल्डर के लिए इस अनुभाग को अपने web.config में डालकर इसे हल किया।

<runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
                <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="4.0.0.0" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>

1
मैं वास्तव में पाया गया है कि किसी कारण के लिए रूट web.config एक बाध्यकारी रीडायरेक्ट जो मेरी समस्या पैदा कर रहा था (विशेष रूप से, ओर इशारा करते हुए किया था 0.0.0.0-2.0.0.0करने के लिए 1.0.0.0), और /View/web.configफ़ाइल को हावी नहीं होता। (इसके अलावा, मुझे विश्वास नहीं है कि आपको इसकी आवश्यकता है /View/Subfolder/)
जोब्रेकहॉस

1

यह त्रुटि बताती है कि आपके पास रेजर इंजन ठीक से आपके प्रोजेक्ट से जुड़ा नहीं है।

समाधान: समाधान एक्सप्लोरर विंडो में अपने वेब प्रोजेक्ट पर राइट क्लिक करें और "Nuget Package प्रबंधित करें ..." चुनें और फिर "Microsoft ASP.NET रेजर" स्थापित करें। यह सुनिश्चित करेगा कि ठीक से पैकेज स्थापित है और यह आपके web.config फ़ाइल में आवश्यक प्रविष्टियाँ जोड़ देगा।



-6

चूंकि ASP.NET MVC 3 RTM बाहर है, रेजर के लिए कॉन्फ़िगर अनुभाग की कोई आवश्यकता नहीं है। और इन वर्गों को सुरक्षित रूप से हटाया जा सकता है।


मुझे आश्चर्य है कि अगर यह सच है, nick4eva। यदि मैं एक नया MVC 3 वेब एप्लिकेशन बनाता हूं, और रेज़र व्यूएंगाइन को चुना है, तो वेब.कॉन्फ़िग, जो दृश्य फ़ोल्डर में मौजूद है, डिफ़ॉल्ट रूप से रेजर कॉन्फ़िगरेशन होगा। अगर मैं उन्हें अक्षम करता हूं, तो मुझे रनटाइम में कंपाइल एरर मिलेंगे।
माइकलवीआर

3
MichaelvR, हाँ यह मेरी गलती थी। मुझे खेद है कि आप भ्रम में आ गए।
निकेवा

क्या यह VB संचालित MVC प्रोजेक्ट के लिए भी गणना करता है? मेरे पास अपने विस्तार के तरीकों की कोई पहुंच नहीं है ... stackoverflow.com/questions/4789273/…
रोपस्टाह

यह उत्तर गलत है। ये कॉन्फ़िगरेशन प्रविष्टियाँ अभी भी आवश्यक हैं। नए प्रोजेक्ट टेम्प्लेट पहले से ही उनके पास हैं लेकिन अगर आप Mvc 2 एप्लिकेशन को अपग्रेड कर रहे हैं तो आपको उन्हें जोड़ना होगा।
marcind
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.