वर्तमान संदर्भ में 'ViewBag' नाम मौजूद नहीं है


89

मैं अपने आवेदन में ViewBag का उपयोग करने की कोशिश कर रहा हूं, मेरे पास हाल के सभी dll, MVC 3 का नवीनतम संस्करण है, लेकिन फिर भी मुझे अभी भी त्रुटि मिल रही है:

"नाम 'ViewBag' वर्तमान संदर्भ में मौजूद नहीं है"

मैंने MVC 3 की स्थापना रद्द कर दी है और फिर से स्थापित किया है और अभी तक कोई बदलाव नहीं हुआ है।

इसके अलावा, मुझे विश्वास नहीं हो रहा है कि Dll GAC में दिखाई दे रहे हैं।

मेरी समस्या क्या हो सकती है? या GAC में dll को कैसे जोड़ें?


1
ध्यान रखें, 5.2.2.0 के लिए web.config को 5.2.2.0 को इंगित करना चाहिए लेकिन MVC असेंबली के लिए दृश्य / web.config से 5.1.0.0 तक
बार्ट

जवाबों:


39

आपको MVC- विशिष्ट रेजर कॉन्फ़िगरेशन को अपने web.config में जोड़ना होगा। यहाँ देखें: रेज़र एचटीएमएल हेल्पर एक्सटेंशन्स (या अन्य नामस्थान विचारों के लिए) नहीं मिला

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


धन्यवाद! उस लिंक ने मदद की! मुझे लगता है कि यह एक साइट बनाने का एक परिणाम है जो MVC 3 बीटा पर था, और फिर जब आप नवीनतम संस्करण प्राप्त करते हैं, तो वेब कॉन्फ़िगरेशन परिवर्तित नहीं होते हैं। धन्यवाद!
efleming

मैंने अपनी पोस्ट को इस के साथ-साथ संबंधित फ़िक्स में भी अपडेट किया है: stevesmithblog.com/blog/…
ssmith

अपने कॉन्फिग सही होने के लिए आप अपग्रेड टूल (अपडेटेड उत्तर देखें) का उपयोग कर सकते हैं।
marcind

3
बस एक नोट: यदि आपके पास अतिरिक्त दृश्य स्थान हैं, अर्थात, सामान्य ~/Viewsस्थान के बाहर , तो ~/Views/Web.configउस स्थान पर भी कॉपी करें ।
थिएबेन

83

मुझे भी यही समस्या आ रही थी। यह पता चला कि मैं ./Views/Web.configफ़ाइल को याद कर रहा था , क्योंकि मैंने ASP.NET MVC टेम्पलेट का उपयोग करने के बजाय एक रिक्त ASP.NET अनुप्रयोग से प्रोजेक्ट बनाया था।

ASP.NET MVC 5 के लिए, एक वेनिला ./Views/Web.configफ़ाइल में निम्नलिखित शामिल हैं:

<?xml version="1.0"?>

<!-- https://stackoverflow.com/a/19899269/178082 -->
<configuration>
    <configSections>
        <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
            <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.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=5.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>

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

    <system.web>
        <httpHandlers>
            <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
        </httpHandlers>

        <!--
                Enabling request validation in view pages would cause validation to occur
                after the input has already been processed by the controller. By default
                MVC performs request validation before a controller processes the input.
                To change this behavior apply the ValidateInputAttribute to a
                controller or action.
        -->
        <pages
                validateRequest="false"
                pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
                pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
                userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <controls>
                <add assembly="System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
            </controls>
        </pages>
    </system.web>

    <system.webServer>
        <validation validateIntegratedModeConfiguration="false" />

        <handlers>
            <remove name="BlockViewHandler"/>
            <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
        </handlers>
    </system.webServer>
</configuration>

./Views/Web.configइस सामग्री वाली फ़ाइल को जोड़ने से मेरे लिए यह समस्या ठीक हो गई।


3
आखिर में हल। मैंने /Views/Web.config फ़ाइल को सर्वर पर तैनात नहीं किया था और वह गायब फ़ाइल त्रुटि का कारण थी।
स्टैक मैन

2
वापस आया और इस घोल का 2 बार उपयोग किया! :)
user230910

2
एक दिन बर्बाद करने के बाद यह पता लगाने की कोशिश की, यह मेरे लिए किया था। धन्यवाद। मुझे केवल <namepaces> टैग में "./Views/Web.config जोड़ने की ज़रूरत थी; <add namespace="System.Web.Optimization"/>
dunwan

मेरे मामले में, किसी कारण से तत्व रूट web.config में नहीं थे, लेकिन 'Views' के तहत एक web.config में जोड़ा गया जब मैंने MVC5 लेआउट बनाया। मैंने तत्वों को रूट web.config पर माइग्रेट किया और 'अतिरिक्त' (??) web.config
JDPeckham

2
यार, भगवान तुम्हें इसके लिए आशीर्वाद देते हैं। मैं इस बात से नाराज था।
ड्रैगन बी।

19

साफ़ करने और पुनर्निर्माण करने का प्रयास करें। इसने मेरे मामले में काम किया।


विश्वास नहीं कर सकता कि मैंने अपना समय बर्बाद किया और सोच रहा था कि मेरे कोड में क्या गड़बड़ है ... धन्यवाद काम किया
Mr_Hmp

यह मानते हुए कि यह काम करता है ... मैं हमेशा ऐसा करना भूल जाता हूं और इतना समय बर्बाद करता हूं ... जरूरी नहीं होना चाहिए
TCC

मेरे मामले में मुझे समाधान से संकुल फ़ोल्डर को हटाना और एक साफ करना था
Nerdroid

9

मुझे एक समाधान में एक ही समस्या थी जिसे दृश्य स्टूडियो 2015 में एमवीसी 5 में अपग्रेड किया गया था।

दृश्य फ़ोल्डर के भीतर web.config फ़ाइल (रूट web.config नहीं) में, मैंने उस संस्करण संख्या को अपडेट किया है जिसमें <configSections>से भेजा गया 2.0.0.0है 3.0.0.0

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

2
आपका बहुत बहुत धन्यवाद! इस संस्करण सामान पागल है। हर बार जब मैं एमएस अपग्रेड करता हूं तो सभी एक-दूसरे के ऊपर होते हैं। लिंग को एसक्यूएल में एंटिटी फ्रेमवर्क द्वारा बदल दिया गया है, एमवीसी 1 से 6 तक, पर और पर चला गया है।
जस्टजॉन

धन्यवाद, मेरे मुद्दे को VS2017 के साथ तय किया।
क्विकनाउल

फिक्स्ड VS 2019 mvc 5 ऐप।
मृदवार Mr ’१

6

विभिन्न चीजों की कोशिश करने के बाद, यह पता चला कि यह वीएस कैश था। आप इसमें स्थित कैशे फ़ाइलों को हटाकर इसे हल कर सकते हैं:

C: \ Users \ your.name.here \ AppData \ Local \ Microsoft \ VisualStudio \ 14.0 \ ComponentModelCache

मैंने अपना प्रोजेक्ट बंद कर दिया, उस रास्ते पर फ़ाइलों को हटा दिया और अपनी परियोजना को फिर से खोल दिया, समाधान को साफ किया और इसे फिर से बनाया और समस्या हल हो गई

जब आप अगली बार Visual Studio लॉन्च करेंगे, तो फ़ाइलों को फिर से बनाया जाएगा


इसने मेरे लिए v15 (VS 2017) में भी काम किया। मैंने शायद ऐसा करने के लिए कभी नहीं सोचा होगा ... एक बड़ी बचत के लिए धन्यवाद, विल्सन और सिल्वर!
पॉल श्रोएडर

यूनिवर्सल पथ%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache
फिएट

3

मेरे पास एक ही समस्या थी और crimbo ने मुझे सही सुराग दिया, यह ./Views/Web.config फ़ाइल के कारण हुआ था जो मौजूद था लेकिन सही नामस्थान नहीं था जिसका मुझे अनुमान है ...

मैंने एक रिक्त MVC5 प्रोजेक्ट बनाया और उसका आयात किया। / / मेरे मौजूदा प्रोजेक्ट में WW.config और प्रत्येक ViewBag उपयोग के तहत लाल तरंगें चली गईं!


विजुअल स्टूडियो 2013, एमवीसी बॉक्स के साथ रिक्त वेब परियोजना की जाँच की। यह न्यूनतम MVC नामस्थान संदर्भों के साथ सभी फ़ाइल संरचना बनाता है। मैंने एक साधारण नियंत्रक और दृश्य जोड़ा। मुझे संकलित त्रुटियां मिलीं "टाइप या नेमस्पेस नाम 'अजाक्स' नामस्थान 'System.Web.Mvc' में मौजूद नहीं है (क्या आप असेंबली संदर्भ याद कर रहे हैं)"। फ़ाइल संपादक चेतावनी को भी दिखाता है "वर्तमान संदर्भ में 'ViewBag' नाम मौजूद नहीं है"। प्रोजेक्ट संदर्भों पर जाएं, System.Web.Mvc ढूंढें, स्थानीय प्रतिलिपि को सही पर सेट करें। बिल्ड को साफ करें और पुनर्निर्माण करें, इससे मेरी समस्या हल हो गई।
कागन अगुन

2

यदि आप Visual Studio 2013 का उपयोग करते हैं और आप MVC 3 का उपयोग करना पसंद करते हैं, तो आपको यह त्रुटि मिलती है क्योंकि Visual Studio 2013 मूल रूप से MVC 3 का समर्थन नहीं करता है (यहां तक ​​कि आप भी बदलते हैं ।/Views/web.config), केवल MVC 4: https: msdn .microsoft.com / en-us / पुस्तकालय / hh266747.aspx


2

मेरे पास एक ./Views/Web.Configफ़ाइल थी, लेकिन साइट को प्रकाशित करने के बाद यह त्रुटि हुई। फ़ाइल पर बिल्ड एक्शन प्रॉपर्टी को चालू करने के Noneबजाय सेट किया गया था Content। इसे बदलने से Contentप्रकाशन को सही ढंग से काम करने की अनुमति मिलती है।


1

गुण संवाद में अनुप्रयोग के डिफ़ॉल्ट नाम स्थान को बदलने के बाद मुझे यह समस्या थी।

./Views/Web.Config में पुराने नामस्थान का संदर्भ था


हां, और यह पूरी तरह से गलत जगह पर एक त्रुटि संदेश देता है .. इसकी जाँच के लायक अगर सभी नामस्थान मौजूद हैं जो सभी web.config फ़ाइलों में संदर्भित हैं - मेरे पास क्षेत्र की वेब / कॉन्फ़िगरेशन फ़ाइल में एक पुराना नाम स्थान है जिसके कारण बहुत सारे मुद्दे हैं
user230910

1

मेरे मामले में, वेबपृष्ठ को बदलना: उचित मूल्य के लिए संस्करण ने मेरी समस्या को हल कर दिया, मेरे लिए सही मूल्य था (3.0.0.0 के बजाय 2.0.0.0):

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

1

सभी दृष्टिकोणों की कोशिश करने के बाद, उनमें से किसी ने भी मेरे लिए काम नहीं किया क्योंकि मेरे पास सही कॉन्फ़िगरेशन हैं। आखिरकार

सिस्टम से "अस्थायी" और "% अस्थायी%" सभी फ़ाइलों को हटाने से इस मुद्दे को हल करने में मदद मिली।

ओपन रन कमांड (विंडोज + आर) और तार के ऊपर टाइप करें और सभी अस्थायी फ़ाइलों को हटा दें।


धन्यवाद! सब कुछ आजमाने के बाद, यह मेरे लिए काम किया।
user390480

1

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

प्रोजेक्ट आउटपुट पथ

वी.एस. बिन फ़ोल्डर में dlls की तलाश करता है


1

मैंने पहले ही बिन और ओबज फाइल को हटाने और वीएस को पुनः आरंभ करने की कोशिश की थी और कोई भाग्य नहीं था।

मैंने भी कई बार यह मुद्दा उठाया है और यह हर बार हल करने के लिए एक दर्द है। अक्सर यह web.config फ़ाइल में से किसी एक संदर्भ का सही संस्करण नहीं होने के कारण होता है। इसका मतलब है कि संपत्ति टैब में संस्करण को देखने के लिए Visual Studio के संदर्भ पर क्लिक करें, और फिर इसे web.config फ़ाइलों में संस्करण से मिलाएं।

दूसरा तरीका है (यदि संभव हो तो) .net फ्रेमवर्क के बाद के संस्करण में अपग्रेड करें और फिर बिन / obj फ़ाइलों को हटाने और विज़ुअल स्टूडियो को पुनरारंभ करें। मैं केवल यह मान सकता हूं कि यह कुछ बदल रहा है

Csproj फ़ाइल के बीच के अंतर की एक त्वरित जाँच वास्तव में कोई बड़ा अंतर नहीं दिखाती है ... लेकिन जो अंतर यह दिखा था, वह था (मैंने पुरानी लाइन दिखाने के लिए (हटाए गए) जोड़ा है)

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> (remove)
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>(remove)
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>

Web.Config फ़ाइल में (दृश्य में एक नहीं)

<add key="webpages:Version" value="2.0.0.0" /> (remove)
<add key="webpages:Version" value="3.0.0.0"/>

यह भी (उसी web.config फ़ाइल में) जोड़ा गया है, लेकिन मैंने इसे मैन्युअल रूप से हटा दिया है

 <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>

अंत में, पैकेज मैनेजर कंसोल में जोड़ें update-package

वेबसाइट को स्थानीय रूप से चलाएं और कोई संकलन त्रुटियां देखें जो मेरे दूसरे पैराग्राफ द्वारा तय की गई थीं (संदर्भों के संस्करण मिलान)


0

मैंने वेबपृष्ठों को अपडेट किया: ./Views/Web.Config फ़ोल्डर के अंतर्गत संस्करण लेकिन यह सेटिंग भी web.config में रूट में मौजूद थी। दोनों को अपडेट करें या रूट web.config से निकालें


0

जैसा कि @Wilson Vallecilla ने पहले ही उल्लेख किया है। कृपया कैश हटाने के लिए नीचे दिए गए चरणों को करें:

फ़ाइलों की खोज के लिए कृपया नीचे दिए गए पथ का अनुसरण करें:

C:\Users\your.name.here\AppData\Local\Microsoft\VisualStudio\14.0\ComponentModelCache

सभी चार फाइलें हटाएं:

  • Microsoft.VisualStudio.Default.cache
  • Microsoft.VisualStudio.Default.catalogs
  • Microsoft.VisualStudio.Default.err
  • Microsoft.VisualStudio.Default.external

मैंने अपना प्रोजेक्ट बंद कर दिया, उस रास्ते पर फ़ाइलों को हटा दिया और अपनी परियोजना को फिर से खोल दिया, समाधान को साफ किया और इसे फिर से बनाया और समस्या हल हो गई

आपकी अस्थाई ASP.NET फ़ाइलें हटाना भी मदद करता है। C: \ Users \ your.name.here \ AppData \ Local \ Temp \ Temporary ASP.NET फ़ाइलें।

यह मेरे लिए काम करता है।

धन्यवाद!


0

MVC5 के लिए, यदि आप स्क्रैच से एप्लिकेशन बना रहे हैं। आपको व्यू फ़ोल्डर में एक web.config फ़ाइल जोड़ने और उसमें निम्न कोड पेस्ट करने की आवश्यकता है।

<?xml version="1.0"?>
<configuration>
  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.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=5.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>
</configuration>

ध्यान दें कि MVC 3 के लिए आपको संस्करण 3.0.0.0 पर बदलना होगा

<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

आपको परिवर्तनों को देखने के लिए * .cshtml पृष्ठ को फिर से बंद और खोलना पड़ सकता है।

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