ไม่มีชื่อ 'ViewBag' ในบริบทปัจจุบัน


91

ฉันพยายามใช้ ViewBag ในแอปพลิเคชันของฉันฉันมี dlls ล่าสุดทั้งหมด MVC 3 เวอร์ชันล่าสุด แต่ฉันยังคงได้รับข้อผิดพลาด:

"ชื่อ" ViewBag "ไม่มีอยู่ในบริบทปัจจุบัน"

ฉันได้ถอนการติดตั้งและติดตั้ง MVC 3 ใหม่แล้ว แต่ก็ยังไม่มีการเปลี่ยนแปลง

นอกจากนี้ฉันไม่เชื่อว่า dll ปรากฏใน GAC

ปัญหาของฉันคืออะไร? หรือจะเพิ่ม dll ใน GAC ได้อย่างไร?


1
โปรดทราบว่าสำหรับ 5.2.2.0 web.config ควรชี้ไปที่ 5.2.2.0 แต่ Views / web.config เป็น 5.1.0.0 สำหรับการประกอบ MVC
Bart Calixto

คำตอบ:


39

คุณต้องเพิ่มการกำหนดค่ามีดโกนเฉพาะ MVC ลงใน web.config ของคุณ ดูที่นี่: Razor HtmlHelper Extensions (หรือเนมสเปซอื่นสำหรับมุมมอง) ไม่พบ

ใช้เครื่องมืออัพเกรด MVC 3เพื่อให้แน่ใจว่าคุณมีค่ากำหนดค่าที่ถูกต้องโดยอัตโนมัติ


ขอบคุณ! ลิงค์นั้นช่วยได้! ฉันเดาว่าทั้งหมดนี้เป็นผลมาจากการสร้างไซต์ที่อยู่ใน MVC 3 Beta และเมื่อคุณได้รับเวอร์ชันล่าสุดการกำหนดค่าเว็บจะไม่เปลี่ยนแปลง ขอบคุณ!
efleming

ฉันได้อัปเดตโพสต์ของฉันด้วยสิ่งนี้รวมถึงการแก้ไขที่เกี่ยวข้อง: stevesmithblog.com/blog/…
ssmith

คุณสามารถใช้เครื่องมืออัพเกรด (ดูคำตอบที่อัปเดต) เพื่อให้แน่ใจว่าการกำหนดค่าของคุณถูกต้อง
marcind

3
หมายเหตุ: หากคุณมีสถานที่ดูเพิ่มเติมเช่นอยู่นอกตำแหน่งปกติ~/Viewsให้คัดลอก~/Views/Web.configไปยังตำแหน่งนั้นด้วย
Dave Thieben

84

ฉันมีปัญหาเดียวกัน ปรากฎว่าฉันหายไป./Views/Web.configไฟล์เพราะฉันสร้างโครงการจากแอปพลิเคชัน ASP.NET ที่ว่างเปล่าแทนที่จะใช้เทมเพลต ASP.NET MVC

สำหรับ 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 กับเซิร์ฟเวอร์และไฟล์ที่หายไปนั้นเป็นสาเหตุของข้อผิดพลาด
Stack Man

2
กลับมาใช้วิธีนี้เป็นครั้งที่ 2! :)
user230910

2
หลังจากเสียเวลาไปหนึ่งวันเพื่อพยายามคิดออกสิ่งนี้ก็ทำเพื่อฉัน ขอบคุณ. สิ่งเดียวที่ฉันต้องเพิ่มในแท็ก <namespaces> ใน "./Views/Web.config คือ; <add namespace="System.Web.Optimization"/>
dunwan

ในกรณีของฉันด้วยเหตุผลบางประการองค์ประกอบไม่ได้อยู่ใน root web.config แต่ถูกเพิ่มลงใน web.config ภายใต้ 'Views' เมื่อฉันสร้างเลย์เอาต์ MVC5 ฉันย้ายองค์ประกอบไปที่ root web.config และลบ 'extra' (??) web.config
JDPeckham

2
ขอพระเจ้าอวยพรคุณสำหรับสิ่งนี้ ฉันรู้สึกรำคาญอย่างมากกับสิ่งนี้
Dragan B.

19

พยายามทำความสะอาดและสร้างใหม่ มันใช้ได้ในกรณีของฉัน


ไม่อยากจะเชื่อเลยว่าฉันเสียเวลาไปกับการสงสัยว่าเกิดอะไรขึ้นกับรหัสของฉัน ... ขอบคุณที่ใช้งานได้
Mr_Hmp

โกรธที่ได้ผล ... ฉันมักจะลืมทำและเสียเวลามาก ... ไม่จำเป็น
TCC

ในกรณีของฉันฉันต้องลบโฟลเดอร์แพ็คเกจออกจากโซลูชันและทำความสะอาด
Nerdroid

9

ฉันมีปัญหาเดียวกันในโซลูชันที่อัปเกรดเป็น MVC 5 ใน Visual Studio 2015

ในแฟ้ม Web.config ภายในโฟลเดอร์เข้าชม (ไม่ web.config ราก), ฉันปรับปรุงหมายเลขรุ่นที่อ้างถึงใน<configSections>จากไป2.0.0.03.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
ขอบคุณมาก! เวอร์ชั่นนี้มันบ้ามาก ทุกครั้งที่ฉันหันกลับมาใช้การอัพเกรด MS ทุกครั้ง Ling เป็น SQL ถูกแทนที่ด้วย Entity Framework, MVC เปลี่ยนจาก 1 เป็น 6 ไปเรื่อย ๆ
JustJohn

ขอบคุณแก้ไขปัญหา VS2017 ของฉัน
QuickNull

แก้ไขแอป VS 2019 mvc 5
MrDywar

6

หลังจากลองทำสิ่งต่างๆปรากฎว่าเป็น VS cache คุณสามารถแก้ไขได้โดยการลบไฟล์แคชที่อยู่ใน:

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

ฉันปิดโปรเจ็กต์ของฉันลบไฟล์ในเส้นทางนั้นและเปิดโปรเจ็กต์ของฉันอีกครั้งทำความสะอาดโซลูชันและสร้างมันอีกครั้งและปัญหาได้รับการแก้ไข

ไฟล์จะถูกสร้างขึ้นใหม่เมื่อคุณเปิด Visual Studio ในครั้งถัดไป


สิ่งนี้ใช้ได้ผลสำหรับฉันใน v15 (VS 2017) เช่นกัน ฉันคงไม่เคยคิดที่จะทำสิ่งนี้ ... ขอบคุณสำหรับการประหยัดครั้งใหญ่ Wilson & Silver!
Paul Schroeder

Universal path%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache
fiat

3

ฉันมีปัญหาเดียวกันและ crimbo ให้เบาะแสที่ถูกต้องมันเกิดจากไฟล์. /Views/Web.config ซึ่งมีอยู่ แต่ไม่มีเนมสเปซที่ถูกต้องฉันเดา ...

ฉันสร้างโครงการ MVC5 เปล่าและนำเข้า. /Views/Web.config ไปยังโปรเจ็กต์ที่มีอยู่ของฉันและคลื่นสีแดงภายใต้การใช้ ViewBag ทุกครั้งก็หายไป!


Visual Studio 2013 สร้างโครงการเว็บเปล่าโดยทำเครื่องหมายในช่อง MVC สร้างโครงสร้างไฟล์ทั้งหมดด้วยการอ้างอิงเนมสเปซ MVC ขั้นต่ำ ฉันเพิ่มตัวควบคุมและมุมมองที่เรียบง่าย ฉันพบข้อผิดพลาดในการคอมไพล์ "ประเภทหรือชื่อเนมสเปซ 'Ajax' ไม่มีอยู่ในเนมสเปซ 'System.Web.Mvc' (คุณไม่มีข้อมูลอ้างอิงการประกอบ)" ตัวแก้ไขไฟล์ยังแสดงคำเตือน "ชื่อ" ViewBag "ไม่มีอยู่ในบริบทปัจจุบัน" ไปที่การอ้างอิงโครงการค้นหา System.Web.Mvc ตั้งค่าสำเนาในเครื่องเป็นจริง ทำความสะอาดงานสร้างและสร้างใหม่มันช่วยแก้ปัญหาของฉันได้
Kagan Agun

2

หากคุณใช้ Visual Studio 2013 และคุณชอบใช้ MVC 3 คุณจะได้รับข้อผิดพลาดนี้เนื่องจาก Visual Studio 2013 ไม่รองรับ MVC 3 โดยกำเนิด (แม้ว่าคุณจะเปลี่ยน ./Views/web.config) เพียง MVC 4: https: // msdn .microsoft.com / en-us / library / hh266747.aspx


2

ฉันมี./Views/Web.Configไฟล์ แต่ข้อผิดพลาดนี้เกิดขึ้นหลังจากเผยแพร่ไซต์ ปรากฎการสร้างการกระทำคุณสมบัติที่ไฟล์ถูกกำหนดให้แทนNone Contentการเปลี่ยนเป็นการContentอนุญาตให้เผยแพร่ทำงานได้อย่างถูกต้อง


1

ฉันประสบปัญหานี้หลังจากเปลี่ยนเนมสเปซเริ่มต้นของแอปพลิเคชันในกล่องโต้ตอบคุณสมบัติ

./Views/Web.Config มีการอ้างอิงถึงเนมสเปซเก่า


ใช่และให้ข้อความแสดงข้อผิดพลาดในตำแหน่งที่ไม่ถูกต้อง. ควรตรวจสอบว่ามีเนมสเปซทั้งหมดที่อ้างถึงในไฟล์ web.config ทั้งหมดหรือไม่ - ฉันมีเนมสเปซเก่าในไฟล์ web / config ของพื้นที่ทำให้เกิดปัญหามากมาย
user230910

1

ในกรณีของฉันการเปลี่ยนหน้าเว็บ: เวอร์ชันเป็นค่าที่เหมาะสมช่วยแก้ปัญหาของฉันได้สำหรับฉันค่าที่ถูกต้องคือ (2.0.0.0 แทนที่จะเป็น 3.0.0.0):

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

1

หลังจากลองใช้ทุกวิธีแล้วไม่มีวิธีใดที่ใช้ได้ผลสำหรับฉันเนื่องจากฉันมีการกำหนดค่าที่ถูกต้อง ในที่สุด

การลบไฟล์ทั้งหมดจาก "temp" และ "% temp%" ออกจากระบบช่วยแก้ปัญหานี้ได้

เปิดคำสั่ง Run (Windows + R) และพิมพ์สตริงด้านบนและลบไฟล์ชั่วคราวทั้งหมด


ขอขอบคุณ! หลังจากลองทุกอย่างแล้วสิ่งนี้ได้ผลสำหรับฉัน
user390480

1

หากคุณได้ลองใช้คำตอบทั้งหมดแล้ว แต่ยังไม่พบคำตอบนี้อาจช่วยแก้ปัญหา หากคุณมีคอนฟิกูเรชันโซลูชันที่แตกต่างกันเช่น Debug, Release ฯลฯ ให้ตั้งค่าเส้นทางเอาต์พุตของโปรเจ็กต์เป็น 'bin' และคอมไพล์โปรเจ็กต์ ยกเลิกการเปลี่ยนแปลงหลังจากรวบรวม

เส้นทางผลลัพธ์ของโครงการ

VS ค้นหา dlls ในโฟลเดอร์ bin


1

ฉันได้ลองลบไฟล์ bin และ obj แล้วและรีสตาร์ท VS และไม่มีโชค

ฉันเคยมีปัญหานี้หลายครั้งและมันก็เจ็บปวดในการแก้ไขทุกครั้ง มักเกิดจากไฟล์ web.config ไม่มีการอ้างอิงอย่างใดอย่างหนึ่งในเวอร์ชันที่ถูกต้อง ซึ่งหมายถึงคลิกที่ข้อมูลอ้างอิงใน Visual Studio เพื่อดูเวอร์ชันในแท็บคุณสมบัติจากนั้นจับคู่กับเวอร์ชันในไฟล์ web.config

อีกวิธีหนึ่งคือ (ถ้าเป็นไปได้) อัปเกรดเป็น. net framework เป็นเวอร์ชันที่ใหม่กว่าแล้วลบไฟล์ bin / obj และรีสตาร์ท Visual Studio ฉันสามารถสันนิษฐานได้ว่ามันมีการเปลี่ยนแปลงบางอย่างในไฟล์

การตรวจสอบความแตกต่างอย่างรวดเร็วระหว่างไฟล์ 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 (ไม่ใช่ไฟล์ใน View)

<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 ในรูท อัปเดตทั้งสองอย่างหรือลบออกจาก root 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 \ ชั่วคราวไฟล์ ASP.NET

สิ่งนี้ใช้ได้กับฉัน

ขอบคุณ!


0

สำหรับ MVC5 ในกรณีที่คุณสร้างแอปพลิเคชันตั้งแต่เริ่มต้น คุณต้องเพิ่มไฟล์ web.config ลงในโฟลเดอร์ Views และวางโค้ดต่อไปนี้ลงไป

<?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 อีกครั้งเพื่อดูการเปลี่ยนแปลง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.