Tên 'ViewBag' không tồn tại trong ngữ cảnh hiện tại - Visual Studio 2015


97

Tôi đang bắt đầu phát triển lại trong ASP.NET và tôi gặp phải một lỗi nhỏ trong Visual Studio. Các tệp .cshtml của tôi hiển thị lỗi khi sử dụng một vài chức năng dao cạo. Ví dụ: "Tên 'ViewBag' không tồn tại trong ngữ cảnh hiện tại". Đây là một hình ảnh:

ảnh chụp màn hình của sự cố trong studio trực quan 2015

Tôi đang sử dụng một dự án demo. Bạn có thể tìm thấy dự án tại đây: https://github.com/Wintellect/Angular-MVC-Cookbook/tree/master/BasicProject

Tôi đã xem qua một số chủ đề khác và hầu hết đề xuất cập nhật (các) tệp web.config. 2 tệp cấu hình này đã có sẵn và vì nó là một bản demo khá phổ biến nên tôi cho rằng nó có tất cả các cấu hình cần thiết trong đó. Tất nhiên, tôi đã xem qua các tệp cấu hình này và chúng thực sự bao gồm các giải pháp được đề xuất.

Những chi tiết khác:

  • Tôi đã sử dụng giải pháp sạch & xây dựng lại nhưng điều đó không thay đổi gì.
  • Khi tôi tạo một dự án MVC hoàn toàn mới, nó hoạt động
  • Bạn của tôi có cùng một vấn đề và cả hai chúng tôi đều sử dụng VS 2015 và Windows 10
  • Tôi vẫn có thể chạy ứng dụng và nó hoạt động.

Cảm ơn trước.


Khi nó vẫn chạy, đó chỉ là một lỗi trong trình biên dịch nền. Thử xóa tệp .suo <Projectname>.
Henk Holterman

bạn đang chạy dự án nào? căn bản ? crud, định tuyến?
Prashant Ghimire

1
@Henk tiếc rằng điều đó không hoạt động.
Michjuh

@Prashant Tôi đã thử cả dự án cơ bản và dự án định tuyến. Vấn đề xảy ra ở cả hai.
Michjuh

Bạn đã giải quyết nó? Tôi đã gặp vấn đề tương tự @Michjuh
Burk,

Câu trả lời:


122

Tôi đã gặp sự cố này mặc dù có tất cả các cấu hình chính xác.

Hóa ra đó là một số tệp không hợp lệ trong Bộ đệm thành phần, ngăn các chế độ xem Razor nhận ra ViewBag, Model và HtmlHelpers . Xóa các tệp này đã giải quyết được sự cố (các phiên bản tốt của các tệp này đã được tạo vào lần sau khi tôi mở Visual Studio).

Các tệp được đặt ở đây:

%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache

Xóa tất cả bốn tệp:

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

Sau đó, tôi đã gặp vấn đề tương tự trên một số máy của nhà phát triển khác và bản sửa lỗi này nhanh chóng giải quyết nó.


9
Tuyệt vời, điều này đã khắc phục sự cố cho tôi. Tôi cũng thấy rằng việc xóa Tệp ASP.NET Tạm thời của bạn cũng hữu ích. C: \ Users \ your.name.here \ AppData \ Local \ Temp \ Temporary ASP.NET Files
Kevin

Đây cũng là bản sửa lỗi cho tôi. Cảm ơn vì đăng!
Caverman

Điều này đã khắc phục sự cố của tôi do nâng cấp .net 4 lên 4.5.2 và nâng cấp mvc 3 lên 5
Joe Phillips

Vấn đề của tôi là các thuộc tính của mô hình của tôi không được công nhận. Bản sửa lỗi này đã giải quyết vấn đề của tôi ngay lập tức.
jkerak

5
thư mục của tôi là 15.0_7e8de76c \ ComponentModelCache cho VS 2017.
Kevin NET

40

Cập nhật số phiên bản trong cài đặt của web.configtệp trong thư mục Chế độ xem.

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

Nếu bạn đã cập nhật phiên bản MVC thông qua nuget, phải là:

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

Các phiên bản phụ thuộc khác cũng có thể cần được cập nhật. Các vấn đề về biên dịch và không gian tên trong Chế độ xem dành cho trình trợ giúp và đối tượng MVC thường liên quan đến web.configcác tệp bị lộn xộn trong thư mục Chế độ xem.


8
Điều này đã hiệu quả với tôi, mặc dù tôi phải nhập số phiên bản là 5.2.0.0 thay vì 5.2.2.0. Bạn có thể xem mình có phiên bản nào bằng cách vào References> System.Web.MVC và chọn Properties. Thanks for the help
user2233949

@ user2233949, @Benjamin Tôi đang sử dụng phiên bản MVC 4.0.0.0, tôi có thể thấy nó từ các thuộc tính. Điều gì nên được sửa chữa trong trường hợp của tôi?
Zeeshan

Kiểm tra tất cả các tệp web.config của bạn và đảm bảo rằng tất cả chúng đang sử dụng phiên bản máy chủ lưu trữ chính xác. Đôi khi, khi bạn có cài đặt bị ghi đè trong các thư mục xem qua, vấn đề có thể trôi qua mà không được sửa chữa.
Benjamin Anderson

1
Tôi đã thử tất cả các đề xuất khác nhưng đề xuất này phù hợp với tôi bằng cách sử dụng 5.2.3.0. Cảm ơn Benjamin
Mitch

1
Đây là câu trả lời chính xác cho tôi. Ngoài ra sau khi thay đổi web.config, đừng quên để đóng tất cả các bạn *.cshtml*.vbhtmlcác file và sạch & xây dựng lại các giải pháp. VS 2019 16.1.2
Štěpán Havránek

22

Tìm "trang web: Phiên bản" trong cài đặt ứng dụng và cập nhật lên phiên bản 3.0.0.0. Web.config của tôi đã có

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

và tôi đã cập nhật nó thành

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

1
Tôi đã gỡ bỏ cả hai dòng (webpages.Version, webpages.Enabled) và dường như làm việc tốt trong MVC 5.2
Grappachu

Điều này sẽ được cập nhật trong cả hai phiên bản của Web.config, dự án gốc và Web.configs của bất kỳ khu vực nào.
Sonu K

Cảm ơn bạn. Đối với trường hợp của tôi, các thẻ có vấn đề trong <configuration> - <configSection> - <sectionGroup name = "system.web.webPages.razor"> Tôi cần thay đổi <sectionGroup name = "system.web.webPages.razor">, <section name = "host"> và <section name = "pages"> để sử dụng Phiên bản = 3.0.0.0
Hong

Xóa bộ nhớ cache ở bất kỳ đâu (kể cả Temporary ASP.NET Files) không giúp được gì, nhưng câu trả lời này đã làm được .
wha7ever

Cài đặt này thậm chí có nghĩa là gì? Nó tương ứng với cái gì? Làm cách nào để xác định phiên bản bạn phụ thuộc vào ứng dụng của mình?
jpmc26

17

Tôi đã vô tình xóa web.configkhỏi Viewsthư mục, vì nghĩ rằng điều đó là không cần thiết. Khi tôi đặt nó trở lại, nó bắt đầu hoạt động.


13

Sau khi thử tất cả mọi thứ dưới ánh mặt trời, nó quay ra một cái gì đó đã được sửa đổi của tôi System.Web.WebPages.Razor <sectionGroup>trong /Views/Web.Configtừ CamelCase thích hợp System.Web.WebPages.Razorđể một tất cả-chữ thườngsystem.web.webpages.razor mà cuối cùng là sự sụp đổ của tôi.

Hy vọng điều này có thể giúp một số tâm hồn tội nghiệp khác với vấn đề này ...

Để tham khảo, đây là mục nhập chính xác (cho kịch bản của tôi)

<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"> 

3
Của tôi là tất cả các chữ thường nhưng không giải quyết được vấn đề của tôi.
Paul Totzke

Cá chép thần thánh. Đây cũng là cái chết của tôi. Tôi không thể tin rằng bạn đã phát hiện ra điều này, @jbwedtech.
Luke Puplett,

Tôi cũng có những thứ này trong trường hợp thấp hơn và việc thay đổi trường hợp không giải quyết được vấn đề.
Andy Brown

5

Đôi khi, việc thay đổi số phiên bản trong cài đặt của web.config là không đủ. Sự cố này xảy ra do Visual Studio 2015 không có công cụ mvc4.

Giải pháp là nâng cấp dự án của bạn lên MVC 5. Nó hoàn toàn giải quyết được vấn đề. Bạn có thể nhận trợ giúp từ trang này. Nó giải thích rõ ràng về nó.

http://www.asp.net/mvc/overview/releases/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web- api-2

Nhân tiện, nhóm Visual Studio đã tuyên bố rằng họ sẽ thêm hỗ trợ mvc4 vào Visual Studio 2015 với bản cập nhật đầu tiên.


5

tôi đã đối mặt với vấn đề này nhiều lần hơn và cuối cùng tôi phát hiện ra rằng nó đã xảy ra vì thư mục chế độ xem phải chứa nó là cấu hình web riêng


2
Nhưng những gì được cho là có trong web.config đó? Nó có nên được tự động tạo không? (cập nhật) Đã tìm thấy những gì nó nên có và cách nó được tạo stackoverflow.com/questions/29305914/…
drzaus

Vâng, bạn nói đúng, trong dự án của tôi, Web.Config không tồn tại trước đó (vâng, nó sẽ tự động tạo ra nhưng đã lấy một dự án từ nhà phát triển trước đó, không rõ tại sao anh ta lại xóa nó). Sau khi thêm tệp Web.Config cho các thư mục Chế độ xem, nó đã hoạt động.
dùng3559462

2

muộn trò chơi nhưng không có giải pháp nào trong số này hiệu quả với tôi.

Tôi đã nâng cấp lên VS 2017 và trang web đã hoạt động, nhưng trình biên dịch Visual Studio đã phá vỡ hầu hết các tệp .cshtml

TLDR;

mysolution.sln có phiên bản sai

sln khác

vì vậy bạn muốn tạo một giải pháp mới với VS mới hơn và so sánh nó với của bạn và sao chép thông tin phiên bản.

các bước nâng cấp đầy đủ:

  1. đảm bảo tệp .sln có phiên bản chính xác cho VS
  2. nhấp chuột phải vào MySolution trong VS> Nuget Manager> Updates> chạy tất cả các bản cập nhật
  3. nhấp chuột phải vào MySolution trong VS> Ứng dụng> cập nhật Khung mục tiêu (4.5.2 trong trường hợp của tôi)
  4. khắc phục mọi sự cố về phiên bản trong tệp .config (tức là RAZOR thành 3.0.0.0)
  5. khắc phục bất kỳ sự cố mã nào trong trình biên dịch (đối với tôi ForEach không rõ ràng)

Dự án của tôi đã được bắt đầu trong VS2013, khi tôi nhấn VS2017, tôi bắt đầu thấy những lỗi này nhưng mọi thứ được biên dịch vẫn ổn nên tôi đã cố gắng tìm hiểu xem điều gì đang xảy ra nhưng không quá khó. Nó đã trở thành một vấn đề vì việc mở một chế độ xem đã tạo ra một số lượng lớn các lỗi. Tôi hiện đang sử dụng VS2019 và tình cờ gặp phải bản sửa lỗi của bạn; bạn rock! .Sln của tôi có 14.0.25123.0 và phải là 16.3.9. Tôi cũng đã khắc phục mọi sự cố về phiên bản với khuôn khổ. Tôi không phải cập nhật các gói nuget (rất may) vì tôi không có thời gian để kiểm tra đầy đủ tất cả các bản cập nhật.
DaBlue

1

Tôi đã lãng phí tốt hơn một ngày làm việc cho việc này. Tôi đã thử mọi thứ trong bài đăng này (và các bài khác), nhưng không có kết quả. Cuối cùng tôi thấy rằng tôi cần phải mở dự án theo một cách khác. Tôi vừa nâng cấp trang web hiện có lên Visual Studio 2015, MVC5, .NET framework 4.5.2 và đang sử dụng Windows 10, nhưng nghi ngờ rằng câu trả lời sẽ giống nhau đối với các phiên bản khác của từng ứng dụng phần mềm.

Vì vậy, đây là tùy chọn menu tôi đã chọn để mở một trang web:

nhập mô tả hình ảnh ở đây

Thay vì điều này, tôi đã mở tệp csproj xác định dự án bằng cách sử dụng tùy chọn menu này:

nhập mô tả hình ảnh ở đây

Sau đó, tôi có tùy chọn "giải pháp sạch" mà nhiều người khác tham khảo:

nhập mô tả hình ảnh ở đây

Tuy nhiên, tôi thậm chí không cần điều này - mọi thứ chỉ hoạt động! Chà, dù sao thì tôi cũng gặp phải những vấn đề tiếp theo ...


1

Tôi đã thêm bộ điều khiển bằng

  • Bước 1: Thêm> Lớp
  • Bước 2: UserController
  • .
  • .
  • .

mã tương ứng được tạo:

namespace SampleApp.Controllers
{
    public class UserController {
    }
}

Các lỗi của tôi đã được thay đổi bằng cách thay đổi Bước 1 thành:

  • Bước 1: Thêm> Bộ điều khiển
  • Bước 2: Bộ điều khiển người dùng
  • .
  • .
  • .

mã tương ứng được tạo:

namespace SampleApp.Controller {
    public class UserController : Controller {
    }
}

Vấn đề là: Tôi đã không kế thừa lớp học của mình từ Bộ điều khiển

Các thông báo khác trong lỗi của tôi bao gồm - tất cả đều là từ sự cố này:

lỗi CS0117: 'ModelState' không chứa định nghĩa cho 'IsValid'

lỗi CS0103: Tên 'RedirectToAction' không tồn tại trong ngữ cảnh hiện tại

lỗi CS0103: Tên 'Chế độ xem' không tồn tại trong ngữ cảnh hiện tại

lỗi CS0103: Tên 'ViewBag' không tồn tại trong ngữ cảnh hiện tại

lỗi CS0103: Tên 'Json' không tồn tại trong ngữ cảnh hiện tại

Hy vọng sự thay đổi này sẽ giúp ích cho những ai chưa chú ý trong bước đầu.


1

Sau khi thử ít nhất 90% mọi giải pháp / thủ thuật của chủ đề này (và những người khác), cuối cùng tôi đã giải quyết được nó !! Cảnh báo spoiler, không có dấu vết logic nào là cái gọi là "giải pháp" sau đây: Chạy giải pháp với tất cả các tab đóng cuối cùng cũng hoạt động, khi không có gì khác có thể tha cho tôi "ViewBag & Co không tồn tại trong bối cảnh hiện tại" ... Bạn đã được cảnh báo, không có logic quái đản nào!

Hy vọng một ngày nào đó nó sẽ giúp ích cho ai đó ^^


1

Trong trường hợp của tôi, sự cố này chỉ xảy ra trên PC của tôi cho một dự án. Dự án của tôi hoạt động tốt trong VS2012 nhưng khi mở vào VS2017 thì gặp sự cố này.

Vấn đề chính đối với tôi ở đây là bộ nhớ cache. Dự án của tôi đã trỏ đến các phiên bản dll được lưu trong bộ đệm cũ hơn cho Razor và MVC và nó không tìm thấy các tính năng được thêm vào trong các phiên bản mới hơn, chẳng hạn như ViewBag. ViewBag đã được thêm vào Razor phiên bản 3, nhưng vì tôi đã lưu vào bộ đệm Razor phiên bản 2 nên nó không thể tìm thấy ViewBag (nhưng nó có thể tìm thấy những thứ khác có trong phiên bản 2). Tuy nhiên, chỉ cần xóa bộ nhớ cache như trong câu trả lời được chấp nhận đã không khắc phục được sự cố của tôi. Chúng tôi đã phải thay đổi tệp cấu hình để nói "sử dụng phiên bản 3 thay vì 2" cho Razor và "sử dụng phiên bản 5 thay vì 4" cho MVC, sau đó đóng VS, xóa bộ nhớ cache và mở dự án và xây dựng lại. Sau đó, mọi thứ đã được khắc phục. Dưới đây là hướng dẫn chi tiết hơn.

Đây là chuỗi các thay đổi đã giúp tôi khắc phục sự cố của mình:

  1. Trong thư mục "Lượt xem" Web.config, thay đổi tất cả các vị trí nơi
    • Phiên bản MVC được đặt thành 4.0.0.0 đến 5.0.0.0
    • Phiên bản Razor được đặt thành 2.0.0.0 đến 3.0.0.0

Đây là những dòng trong trường hợp của tôi:

<sectionGroup name="system.web.webPages.razor" type="... Version=3.0.0.0 ...">
    <section name="host" type="... Version=3.0.0.0 ..." .../>
    <section name="pages" type="... Version=3.0.0.0 ..." .../>
</sectionGroup>
...
<host factoryType="... System.Web.Mvc, Version=5.0.0.0 ..." />
...
<pages
    ...
    pageParserFilterType="... Version=5.0.0.0 ..."
    pageBaseType="... Version=5.0.0.0 ..."
    userControlBaseType="... Version=5.0.0.0 ...">
    <controls>
        <add assembly="... Version=5.0.0.0 ..." ... />
    </controls>
</pages>

(lưu ý: 1) các phiên bản của bạn có thể khác nhau, tôi chỉ nói những gì cần thiết phải làm trong trường hợp của tôi 2) Tôi đã bỏ qua một số nội dung với "..." cho ngắn gọn 3) ngay cả khi bạn có phiên bản MVC giống như 5.3.2.0 bạn vẫn nên nhập 5.0.0.0, giống với phiên bản của Razor - nhập tất cả các số không trong 3.0.0.0)

  1. Trong tệp cấu hình chính (tệp ở cấp cao nhất) thay đổi webPages:versiontừ 2.0.0.0 thành 3.0.0.0.

  2. Thay đổi này có thể không ảnh hưởng đến giải pháp nhưng tôi vẫn sẽ đề cập đến nó. Đảm bảo rằng <namespaces>phần của thư mục "Chế độ xem" có cùng nội dung với tệp .conifg chính ở gốc của dự án, giống như:

<namespaces>
    <add namespace="System.Web.Helpers" />
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Optimization" />
    <add namespace="System.Web.Routing" />
    <add namespace="System.Web.WebPages" />
</namespaces>
  1. Cuối cùng, đóng VS. Xóa tất cả các tệp bộ nhớ cache trong %LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache(hoặc bất kỳ đường dẫn chính xác nào của bạn) giống như nó được đề xuất trong (hiện tại) câu trả lời được chấp nhận bởi Fenton. Cũng xóa .scantệp, ngay cả khi nó không được đề cập trong câu trả lời đó. Sau khi hoàn tất, hãy mở VS, Làm sạch dự án của bạn và Xây dựng lại nó. Mọi thứ sẽ hoạt động ngay bây giờ. Nó đã làm việc cho tôi.

0

Tắt và bật lại có tác dụng với tôi. Bạn có thể thử khởi động lại studio trực quan.


Nghe giống như một câu trả lời đùa, nhưng đây là những gì đã cố định cho tôi. nhún vai
Douglas Timms

0

Tôi đã có thể giải quyết vấn đề bằng cách thêm phần sau vào đầu trang .cshtml của mình

@{ViewBag.Title = "Title";}

Sau khi biên dịch lại, tôi có thể xóa dòng này và lỗi đã biến mất.


0

Tôi đã đối mặt với vấn đề tương tự với một trong những quan điểm của tôi. Trong trường hợp của tôi, tôi chỉ làm sạch dung dịch và cố gắng xây dựng lại nó và các hoạt động của nó.



0

Tôi phải đối mặt với cùng một vấn đề. Tôi đã thử giải pháp Clean, Build và Rebuild, nhưng không hiệu quả với tôi.

Vì vậy, cuối cùng tôi đã làm như dưới đây:

  1. Nhấn phím Windows + R
  2. % temp%
  3. Nhấn Enter
  4. Xóa tất cả các tệp (Nếu còn lại một số tệp. Không xóa , không có vấn đề gì)

Hy vọng nó cũng làm việc cho các bạn.


0

Sau khi nâng cấp một trong các ứng dụng của khách hàng của tôi từ ASP MVC 4 lên ASP MVC 5, Chúng tôi đã gặp lỗi nhà thiết kế liên quan đến Html Helpers và ViewBag trong các trang cshtml.

Để khắc phục những vấn đề đó, hãy đảm bảo rằng bạn thực hiện như sau: Cài đặt Thư viện trợ giúp Web Asp.NET từ Nuget Mở Web.config của dự án và cập nhật các ràng buộc nếu chúng chưa được cập nhật khi cài đặt các gói Nuget chẳng hạn

<dependentAssembly>
  <assemblyIdentity name=”System.Web.Mvc publicKeyToken=”31bf3856ad364e35 />
  <bindingRedirect oldVersion=”0.0.0.0-5.2.2.0 newVersion=”5.2.2.0 />
</dependentAssembly>

Tìm “trang web: Phiên bản” trong cài đặt ứng dụng và cập nhật lên phiên bản 3.0.0.0. Web.config của tôi đã có

và tôi đã cập nhật nó thành

Khởi động lại Visual Studio và xây dựng lại. Bạn có thể phải xóa thư mục bin cho dự án của mình

Ghé thăm cái này: https://lajak.wordpress.com/2014/11/16/asp-mvc-5-viewbag-does-not-exist-in-the-current-context/


-1

Sau khi thử mọi thứ khác và cảm thấy hơi thất vọng, tôi đã nâng cấp .NET framework trên ứng dụng MVC5 của mình từ 4.5 lên 4.5.2. Bằng cách nào đó nó đã khắc phục sự cố của tôi. Hy vọng nó giúp.


-4

Tôi đã giải quyết việc thay thế trong web.config

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

với

 <add key="webpages:Enabled" value="true" />

Chỉ cần thêm tại sao điều này đã giảm bình chọn - nó cho phép xem thực tế để có thể nhìn thấy từ một trình duyệt Tôi tin
mtbennett
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.