Dao cạo ném ném ném Tên 'mô hình' không tồn tại trong bối cảnh hiện tại


201

Sau khi tái cấu trúc đáng kể trong ứng dụng MVC 4 của tôi và Razor hiển thị lỗi này trong khi gỡ lỗi Lượt xem:

Tên 'mô hình' không tồn tại trong bối cảnh hiện tại.

Đây là dòng mã vi phạm:

@model ICollection<DataSourceByActive>

Tôi biết rằng việc sử dụng @modellà chính xác.

Tại sao chuyện này đang xảy ra? Làm thế nào tôi có thể sửa chữa nó?


Chìa khóa là "trong bối cảnh hiện tại". Ở đâu đó một khung không được mở hoặc đóng ... Vì vậy, tuyên bố của bạn không nằm trong bối cảnh mà bạn nghĩ là như vậy.
Floris

1
Bạn có thể thêm mã điều khiển cùng với một số đánh dấu mẫu về những gì bạn đang cố gắng làm không?
scniro

Câu trả lời:


245

Tôi nghĩ rằng bạn đã làm hỏng tệp web.config nằm trong thư mục Lượt xem.

Tạo một dự án mới nhắm mục tiêu vào cùng một khung .NET và sao chép tệp Views / web.config của nó lên trên dự án hiện tại của bạn. Điều này sẽ khắc phục vấn đề của bạn.

Ngoài ra, như Dudeman3000 đã nhận xét, nếu bạn có Khu vực trong dự án MVC của mình thì tất cả đều có Views\web.configtệp.


20
hãy nhớ rằng nếu bạn có các Vùng trong dự án MVC của mình thì tất cả chúng cũng có các tệp Views \ web.config!
Dudeman3000

6
Điều kỳ lạ là web.config của tôi trong thư mục lượt xem vẫn ổn, nhưng web.config của dự án có phiên bản trang web là 2.0.0. Phát hiện lỗi sai đã biến mất khi tôi thực hiện 3.0.0.
William T. Mallard

43
This will fix your problem.Nó đã không làm.
Timwi

2
@AnirudhaGupta Người trong câu hỏi.
Timwi

1
Tôi đã sao chép tệp web.config hợp lệ vào thư mục Lượt xem của mình nhưng nó không được bao gồm trong dự án.
Wildcat Matt

104

Hãy chắc chắn rằng bạn có các mục sau trong cả thư mục trang web Web.configvà lượt xem của bạn Web.configtrong appSettingsphần

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

Đối với sử dụng MVC5:

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

(Và nó chỉ tồn tại trong Web.configtệp chính .)


14
Cảm ơn! Đối với MVC5, số phiên bản cần phải có 3.0.0.0. (Và nó chỉ tồn tại trong tệp Web.config chính .)
xec

Đây là câu trả lời chính xác mà tôi sẽ nói khi tôi cố gắng thay đổi phiên bản không, nhưng cuối cùng, đây là điều duy nhất ngăn chặn sự xâm nhập của dao cạo hoạt động.
Shivam Chopra

6
Điều này làm việc cho tôi. Tôi đã phải khởi động lại Visual Studio sau khi thay đổi này để mọi thứ hoạt động.
Ravvy

1
Tôi gặp vấn đề này với MVC 5, vấn đề là khóa tồn tại nhưng là phiên bản nhắm mục tiêu 2.0.0.0thay vì 3.0.0.0. Thay đổi mà đã khắc phục vấn đề. Cảm ơn bạn!
vaindil

Tôi đã sử dụng nó và nó hoạt động nhưng tôi chỉ thêm nó vào lượt xem web.config. Intellisense xuất hiện ngay sau khi khởi động lại VS.
Matt

48

Đây là những gì tôi đã làm:

  1. Đóng Visual Studio
  2. Xóa tệp SUO
  3. Khởi động lại Visual Studio

Tệp .suo là một tệp ẩn trong cùng thư mục với tệp giải pháp .svn và chứa Tùy chọn người dùng Visual Studio.


Vâng, không có web.configtệp nào cho ASP.NET Coreứng dụng, vì vậy điều này đã làm việc cho tôi (cũng đã thêm một số tiện ích mở rộng để cải thiện intellisense).
VMAtm

2
Tôi thậm chí không phải xóa tệp SUO. Tôi vừa đóng và mở Visual Studio.
Jim S

Visual Studio 2019: Không có tệp suo, xóa .vsthư mục đã giúp.
Štěpán Havránek

Cảm ơn .. điều này đã làm cho tôi. Ứng dụng .net Core 2.0 mvc
roblem

2
Visual Studio 2019 tại đây, đóng và mở lại đã sửa nó cho tôi. Cảm ơn.
JordanGW

26

Tôi gặp vấn đề tương tự, tôi đã tạo một dự án mới và sao chép các tệp web.config như được đề xuất trong câu trả lời của Gupta, nhưng điều đó không khắc phục được cho tôi. Tôi đã kiểm tra câu trả lời của Alex và Liam, tôi nghĩ rằng dòng này phải được sao chép từ web.config mới, nhưng có vẻ như chính dự án mới không có dòng này (MVC5):

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

Thêm dòng vào tệp view / web.config đã giải quyết vấn đề cho tôi.


Điều này xảy ra nếu bạn nâng cấp từ asp.net phiên bản 4.0.0 lên 4.5.1. Trong trường hợp của tôi, web.config chính của tôi đã hiển thị các trang web: Version = 2.0.0.0 nhưng nó phải là 3.0.0.0. Cập nhật giá trị này đã khắc phục vấn đề.
Veysel Ozdemir

15

Thay đổi dòng sau trong web.config của thư mục xem đã giải quyết cùng một lỗi.

Từ

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

Đến

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

1
Điều này cũng làm việc cho tôi. Tôi đã nâng cấp dao cạo để hỗ trợ C # 6 và MVC cũng phải cập nhật. Kiểm tra System.Web.Mvctham chiếu lắp ráp của bạn để xác nhận phiên bản chính bạn cần.
James Wilkins

Tôi đã từng gặp vấn đề tương tự. sửa tất cả các hội đồng MVC, Dao cạo, v.v. trong web.config thành x.0.0.0 để mọi thứ hoạt động trở lại với tôi
mamashare

@JamesWilkins Nice, làm việc cho tôi ty. Chỉ cần một điều, xóa tệp .suo dự án của bạn sau đó và khởi động lại VS.

nắm bắt tốt! Tôi đã phải đối mặt với vấn đề này sau khi tôi nâng cấp từ .net framework 4.0 lên 4.6 và rõ ràng là chỉ ra phiên bản lắp ráp sai.
prashant

10

Trong trường hợp của tôi, gần đây tôi đã cập nhật từ MVC 4 lên MVC 5, điều này làm hỏng web.config khá tệ. Bài viết này đã giúp rất nhiều.

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

Điểm mấu chốt là bạn cần kiểm tra tất cả các tham chiếu số phiên bản trong web.config và Views / web.config để đảm bảo rằng chúng đang tham chiếu các phiên bản nâng cấp chính xác được liên kết với MVC 5.


1
Nếu bạn đã nâng cấp từ MVC 4 lên MVC 5, đây là câu trả lời cần kiểm tra. Nó chính xác xác định chính xác các vấn đề phiên bản, giải quyết vấn đề của tôi và có rất ít rủi ro để phá vỡ bất cứ điều gì.
R. Schreurs

10

Thay đổi thành @Model từ @model đã thực hiện công việc cho tôi.

@model đại diện cho loại đối tượng View Model. @Model đại diện cho đối tượng View Model.


1
Tôi ước tôi sẽ ngừng quên điều này! Cảm ơn vì đã nhắc tôi!
Mike

1
Số lần tôi phải tìm kiếm vấn đề này thật khó chịu .. Nhưng tôi vui vì nó là một sửa chữa đơn giản!
Brendan Sluke

7

Tôi đã tìm thấy một giải pháp. Nếu bạn muốn cập nhật phiên bản dao cạo hoặc mvc 4 lên 5, hãy thay đổi một số dòng.

Mã cũ trong Lượt xem / web.config

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

Thay thế bằng

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

sectionGroup cũng phải thay đổi


6

Trong trường hợp của tôi, mã sau đây được tìm thấy là hữu ích. Đặt mã bên dưới trong tệp Web.config trong thư mục Lượt xem.

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

Sau khi mã được cập nhật, hãy đảm bảo làm sạch và xây dựng lại giải pháp. Tôi mong rằng nó giúp ích được cho bạn!


5

Không có câu trả lời nào hiện có cho tôi, nhưng tôi đã tìm thấy những gì đã làm cho tôi bằng cách so sánh các .csprojtệp của các dự án khác nhau. Hướng dẫn chỉnh sửa sau đây thành .csprojtệp XML đã giải quyết vấn đề về dao cạo râu cho tôi, có lẽ điều này có thể giúp người khác đã thử tất cả các câu trả lời khác không có kết quả. Điều quan trọng là xóa mọi trường hợp <Private>False</Private>trong <Reference>:

<ItemGroup>
  <Reference Include="Foo">
    <HintPath>path\to\Foo</HintPath>
    <!-- <Private>False</Private> -->
  </Reference>
  <Reference Include="Bar">
    <HintPath>path\to\Bar</HintPath>
    <!-- <Private>True</Private> -->
  </Reference>
</ItemGroup>

Tôi không biết làm thế nào những người đến đó hoặc chính xác những gì họ làm, có lẽ ai đó thông minh hơn tôi có thể thêm thông tin đó. Tôi rất vui khi cuối cùng đã giải quyết vấn đề này.


Cảm ơn vì lời đề nghị, điều này cũng có hiệu quả với tôi, vì bất kỳ lý do gì
Schantic

Làm việc cho tôi quá.
Alex

Đó là lựa chọn duy nhất hoạt động trong trường hợp của tôi. Tôi đã chuyển một dự án vs2010 sang năm 2019 và làm việc như một cơ duyên. Sau khi lưu csproj, tôi đã cố gắng bỏ ghi chú các thẻ như tệp gốc và nó vẫn hoạt động ...
jefissu

3

Vì một số lý do, web.config của tôi có 0.0.0.0 trong thuộc tính oldVersion:

<runtime>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
      </dependentAssembly>
</runtime>

thay đổi thành 1.0.0.0 là giải pháp:

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0"/>
  </dependentAssembly>

3

Tôi đã sử dụng một dự án MVC4 với Visual Studio 2019 - và hóa ra VS 2019 không hỗ trợ ra khỏi MVC 4. Bạn phải cài đặt này.

Các bước:

  • Mở trình cài đặt Visual studio (Tìm kiếm Trình cài đặt Visual Studio trong cửa sổ)
  • Nhấp vào các thành phần riêng lẻ
  • Viết "mvc" vào hộp tìm kiếm
  • Kiểm tra hộp mvc4
  • Nhấp vào "Sửa đổi" ở dưới cùng bên phải

LƯU Ý: Cần thiết cho phòng thu trực quan phải đóng cửa

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


2

Trong trường hợp của tôi, vấn đề là sau khi nâng cấp dự án từ MVC 4 lên MVC 5, bằng cách nào đó tôi đã bỏ lỡ một thay đổi phiên bản trong Lượt xem / web.config:

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

Nó vẫn có phiên bản 2.0.0.0 cũ. Sau khi thay đổi phiên bản thành 3.0.0.0, mọi thứ bắt đầu hoạt động tốt.

Ngoài ra, vì sự cố này, Visual Studio 2015 Community Edition sẽ bắt đầu làm hỏng CPU (mức sử dụng 30 - 40% khi không sử dụng) mỗi khi tôi mở tệp .cshtml.


2

Tôi gặp vấn đề tương tự khi triển khai Dịch vụ ứng dụng Azure

Trong trường hợp của tôi, đó là vì ~ / Lượt xem / Web.config không được bao gồm trong dự án.

Nó hoạt động trong IIS Express nhưng khi tôi triển khai đến azure, tôi đã gặp lỗi tương tự. Bằng cách không được bao gồm trong tệp .csproj, nó đã không được triển khai.

Giải pháp là đảm bảo ~ / Lượt xem / Web.config được bao gồm trong dự án.

Nếu bạn truy cập giải pháp thám hiểm và nhấp vào biểu tượng "Hiển thị tất cả các tệp", sau đó mở Chế độ xem, bạn có thể thấy tệp Web.config không được bao gồm bên dưới.

Thêm nó vào, xuất bản lại và bob là chú của bạn.


1

Đối với tôi, vấn đề là một phiên bản .NET xung đột trong một trong những thư viện mà tôi mới nhập. Thư viện tôi đã nhập được biên dịch cho 4.5.2 và trang web ASP.NET MVC tôi đã nhập nó vào mục tiêu 4.5. Sau khi biên dịch lại lib cho 4,5 trang web sẽ biên dịch.

Ngoài ra, không có lỗi biên dịch, nhưng vấn đề đã được báo cáo là "cảnh báo". Vì vậy, hãy chắc chắn để đọc tất cả các cảnh báo nếu có.


1

Để giải quyết vấn đề này, tôi đã đảm bảo rằng tôi đã nâng cấp lên phiên bản MVC mới nhất bằng NuGet và Gói Trình quản lý gói.

Cài đặt-Gói Microsoft.AspNet.Mvc -Version 5.2.4

Sau đó nâng cấp lên phiên bản Dao cạo mới nhất

Cài đặt-Gói Microsoft.AspNet.Razor -Version 3.2.4

Sau đó, tôi đã thay đổi tất cả các tệp web.config để phản ánh sự thay đổi. Như bạn sẽ thấy dưới đây:

Trong tệp web.config chính, đảm bảo rằng các trang web: phiên bản là chính xác. Đây là nơi nó có thể được tìm thấy (bỏ qua các phím khác):

<configuration>
 <appSettings>
   <add key="webpages:Version" value="3.0.0.0"/>
   <add key="ClientValidationEnabled" value="true"/>
   <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
 </appSettings>
</configuration>

Sau đó tìm kiếm các phiên bản khác được liệt kê trong các hội đồng, kiểm tra phiên bản của hội đồng với phiên bản của thư viện được liệt kê trong tài liệu tham khảo dự án của bạn! Bạn có thể không cần tất cả những thứ này.

<system.web>
    <compilation debug="true" targetFramework="4.6">
        <assemblies>
            <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </assemblies>
    </compilation>
</system.web>

Thời gian chạy lắp ráp Liên kết cũng sẽ hiển thị "newversion", xem nó đọc NewVersion 5.2.4.0 ở đâu? Nhưng cũng kiểm tra tất cả các phiên bản khác.

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
        <assemblyIdentity name="System.Web.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-5.2.4.0" newVersion="5.2.4.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

THEN trong phần Lượt xem Web.Config, đảm bảo rằng Dao cạo là phiên bản chính xác:

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

Và Lastlt có phần Trang của Lượt xem Web.Config

    <pages
    validateRequest="false"
    pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
      </controls>
    </pages>

1

nếu bạn gặp vấn đề này mà không có bất kỳ thay đổi nào trong dự án của bạn như tôi, bạn cần thay đổi web.config được đặt trong Thư mục Xem. chỉ cần viết dòng mới bằng cách Enter hoặc Xóa một dòng trống. sau đó lưu web.config và xây dựng lại. vấn đề của tôi đã giải quyết với giải pháp này


0

Tôi đã cố gắng thêm một chế độ xem bên ngoài thư mục "Lượt xem" của tôi (chỉ để tổ chức mã của tôi theo cách khác, tôi đoán vậy), khi tôi gặp vấn đề này. Tạo chế độ xem bên trong Chế độ xem (theo quy ước) đã giải quyết nó.


0

Trong trường hợp của tôi, tôi đã mất tích @ vào đầu buổi thuyết minh

    @foreach (var item in Model)
    {
        <tr class="clickable-row">
            <td class="clickable-field">
                @Html.DisplayFor(modelItem => item.Label)
            </td>
            <td class="clickable-field hidden-xs">
                @Html.DisplayFor(modelItem => item.Value)
            </td>
        </tr>
    }

Điều này quan trọng; Không biết tại sao bạn bị hạ cấp.
FlyingV

1
Bởi vì nó không có gì để làm với câu hỏi ban đầu.
Ryan

0

Trong trường hợp của tôi, tôi đã xóa tệp web.config khỏi thư mục Lượt xem một cách tình cờ. Tôi đã thêm nó trở lại, và nó là OK.


-3

Tôi đã giải quyết vấn đề bằng cách sử dụng @Modelthay vì chỉ modelkhi in các biến.


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.