@ उपयोग घोषणा के बजाय रेजर पृष्ठों में अतिरिक्त नामस्थान कैसे जोड़ें?


146

क्या pages/namespacesवेबकॉन्फ़िग में तत्व में नामस्थान प्राप्त करने के लिए किसी प्रकार के जादू का उपयोग करने की आवश्यकता है?

<pages>
    <namespaces>
        <add namespace="System.Web.Mvc"/>
        <add namespace="System.Web.Mvc.Ajax"/>
        <add namespace="System.Web.Mvc.Html"/>
        <add namespace="System.Web.Routing"/>
        <add namespace="System.Web.WebPages"/>
        <add namespace="System.Web.Helpers"/>
        <add namespace="MyCustomHelpers"/>
    </namespaces>
</pages>

ऊपर सिर्फ काम नहीं करना चाहता। मुझे पता है कि नाम स्थान ठीक है क्योंकि जब मैं @using MyCustomHelpersपृष्ठ के शीर्ष पर रखता हूं तो यह जादुई रूप से काम करता है।

यह इतना है कि मैं प्राप्त कर सकता हूं Html.SomeFunction()@using अपने सभी पृष्ठों के शीर्ष पर रखने के बिना काम करने लिए


1
एमवीसी 3 का कौन सा रिलीज आप उपयोग कर रहे हैं?
marcind

मैं MVC 3 पूर्वावलोकन का उपयोग कर रहा था, इसलिए अन्य उत्तर ने मेरे लिए काम किया और अभी भी काम कर रहा है, उन्नयन के बाद भी ... हालांकि आपका उत्तर नए संस्करण के लिए अधिक उपयुक्त लगता है - जिसे मैं शीघ्र ही अपग्रेड करूंगा। शर्म की बात है कि मैं दो जवाब स्वीकार नहीं कर सकता।
MyNameIsJob

यह उत्तरों में टिप्पणियों से स्पष्ट नहीं है, लेकिन MVC4 में, नामस्थान को वेब में जोड़ा जाना चाहिए। \ फ़ाइल फ़ोल्डर में कॉनफिग फ़ाइल, अनुप्रयोग Web.Config नहीं। <system.web.webPages.razor>Config अनुभाग पहले से ही है कि web.config में मौजूद होना चाहिए!
बेन मैकइंटायर

जवाबों:


163

अद्यतन : कृपया मेरे अपडेट किए गए उत्तर पर एक नज़र डालें जो MVC 3 RC पर लागू होता है: रेज़र HtmlHelper एक्सटेंशन (या अन्य नामस्थान विचारों के लिए) नहीं मिला

यह MVC 3 पूर्वावलोकन 1 और MVC 3 बीटा (आज ही जारी किया गया) के बीच बदल गया है। पूर्वावलोकन 1 में रेजर ने WebForms नामस्थान विन्यास अनुभाग का उपयोग किया। हालाँकि बीटा में एक नया कॉन्फिगरेशन सेक्शन है जो WebForms से अलग होता है। आपको अपनी web.config फ़ाइल में follwing को जोड़ना होगा (या बस टेम्पलेट से एक नए प्रोजेक्ट के साथ शुरू करना होगा):

<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>
  <pages pageBaseType="System.Web.Mvc.WebViewPage">
    <namespaces>
      <add namespace="MyCustomHelpers" />
    </namespaces>
  </pages>
</system.web.webPages.razor>

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

ध्यान दें कि रेजर को MVC3 बीटा में काम करने के लिए web.config में जो आवश्यक है, उसमें अन्य परिवर्तन हैं ताकि आप ~\View\Web.configबीटा प्रोजेक्ट टेम्प्लेट में मौजूद जहाजों की फ़ाइल पर एक नज़र डाल सकें ।


2
FWIW, मैंने पाया है कि pageBaseType="System.Web.Mvc.WebViewPage"विशेषता भी आवश्यक है। मैंने आपका जवाब अपडेट कर दिया है।
पोर्टमैन

1
क्या यह उसी तरह है जैसे आप MVC 3 RC के लिए करते हैं?
क्लार्क

1
+1 धन्यवाद। मैंने आज इस समस्या का उत्तर खोजने की कोशिश में बहुत समय लगा दिया।
जेसेगैविन

32
यदि आप काम नहीं कर रहे हैं या कोई त्रुटि दे रहे हैं तो आपको संभवतः .cshtml फ़ाइल को बंद करने और फिर से खोलने की आवश्यकता होगी
Simon_Weaver

1
@ साइमन हाँ, आपको फ़ाइल को फिर से खोलने की आवश्यकता है। संपादक अभी web.config परिवर्तनों के लिए नहीं देख रहा है।
marcind

50

यदि आप अपने नाम स्थान की घोषणा को Web.config"दृश्य" फ़ोल्डर और / या वर्तमान क्षेत्र के "दृश्य" फ़ोल्डर (आपके विचार के आधार पर) के आधार पर रखते हैं - यह अपेक्षा के अनुरूप काम करना चाहिए।


6

मुझे यह http://weblogs.asp.net/mikaelsoderstrom/archive/2010/07/30/add-namespaces-with-razor.aspx मिला, जो बताता है कि अपने सभी रेज़ल पेजों में एक कस्टम नेमस्पेस कैसे जोड़ें।

मूल रूप से आप इसे बना सकते हैं

using Microsoft.WebPages.Compilation;
public class PreApplicationStart
{
   public static void InitializeApplication()
   {
       CodeGeneratorSettings.AddGlobalImport("Custom.Namespace");
   }
}

और अपने असेंबलीइन्फो में निम्न कोड डालें

[assembly: PreApplicationStartMethod(typeof(PreApplicationStart), "InitializeApplication")]

विधि InitializeApplication Global.asax में Application_Start से पहले निष्पादित की जाएगी


विधि System.Web.WebPages.Razor.WebCodeRazorHost.AddGlobalImport में ले जाया गया ("पूरी तरह से। नाम");
अगरात १५'१ '

4

जो इसके लायक है, उसके लिए एक और तकनीक है अपने हेल्पर एक्सटेंशन क्लास को सिस्टम नेमस्पेस में डाल देना जो पहले से ही डिफ़ॉल्ट रूप से व्यू इंजन द्वारा शामिल है। उदाहरण के लिए:

namespace System.Web.Mvc
{
    public static class HtmlHelper_MyExtensions
    {
        ...
    }
}

इस तरह, जब तक कक्षा वाले पुस्तकालय को संदर्भित किया जाता है, तब तक सब कुछ इसे देखेगा। जब से आप एक System.Web.Mvcवर्ग का विस्तार कर रहे हैं , यह समान नामस्थान में विस्तार विधियों को रखने के लिए यथोचित स्वीकार्य है।


0

देखने के मूल में web.config में परिवर्तन किए गए थे यह सुनिश्चित करने के बाद दृश्य को बंद करने और फिर से खोलने का प्रयास करें।

बंद करने और फिर से खोलने से मेरी समस्या ठीक हो गई।

यहाँ देखें:

ASP.NET MVC 4 रेजर दृश्य में नामस्थान समस्या

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.