Ошибка ViewBag.Title

Работа с текущим RC2 - генерируемый шаблон Представления Razor включают в себя:

@{
    ViewBag.Title = "Details1";
    Layout = "/Views/Shared/_Public.cshtml";

}

С красным squiggly под ViewBag.Title и этой ошибкой компилятора: '

Error   4   One or more types required to compile a dynamic expression cannot be found. Are you missing references to Microsoft.CSharp.dll and System.Core.dll? c:\Visual Studio 2010\Projects\myProj\Views\Webinar\Details1.cshtml 6   2   TTSTrain.Webinars.WebEntry

Но проект строит и функционирует правильно. Является ли ошибка индикатором других проблем, которые необходимо решить?

Ответ 1

У меня возникла такая же проблема после того, как я удалил атрибут targetFramework из элемента <compilation> в файле Web.config.

Как только я вернул его в

<compilation debug="true" targetFramework="4.0">

Все снова работало отлично!

Ответ 2

Я решил это следующим образом:

Сначала я заметил использование gacutil (Global Assembly Cache Utility), в котором содержались две ссылки на System.Core, от одной до версии 4.0 и от одной до версии 3.5. Очевидно, что внутри просмотров бритвы, даже если в проекте у меня была правильная ссылка на версию 4.0, она все еще использовала версию 3.5 и почему я получал ошибку о динамических типах. Чтобы проверить, откроется ли ваше приложение как администратор командной строки Visual Studio и выполните:

gacutil -l System.Core

Чтобы удалить ссылку на старую версию System.Core, я сделал следующие шаги:

- cd %systemroot%\assembly\

Здесь у вас может быть больше одного "gac" -каталога, поэтому вам придется искать в каждом, чтобы найти ваш компонент. Для меня это было в каталоге "gac_MSIL".

- cd gac_msil
- cd System.Core
- cd <assembly version number>__<public key token>
- erase *.* Say "y" to are you sure.
- cd ..
- rd <assembly version number>__<public key token>
- cd ..
- rd System.Core

После этого я снова открыл свое решение в visual studio и ошибка исчезла, он правильно ссылается на System.Core 4.0, и я больше не получал динамических ошибок:)

Надеюсь, это поможет и вам, Лучший, N.

Ответ 3

Как и в ответе @Kaiser, я столкнулся с этой проблемой в результате наличия нескольких сборок System.Core в GAC.

Я решил не удалять сборку 3.5. Вместо этого в представлении web.config я изменил configuration/system.web/compilation node следующим образом:

<compilation debug="true" targetFramework="4.0">
    <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=1.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.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    </assemblies>
</compilation>

Важной линией является последний assembly node: он сообщает компилятору Razor, какую версию сборки GAC использовать.

Как только я это сделал, все было в моих взглядах на Razor.

Ответ 4

У меня нет этой проблемы при запуске VS 2012 в качестве администратора.

В противном случае, что сработало для меня:

в корневой веб-конфигурации добавили в качестве рекомендуемой ссылки для правильной сборки в качестве дочернего элемента компиляции node `

<system.web>
    <compilation debug="true" targetFramework="4.5">
        <assemblies>
            <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        </assemblies>
    </compilation>
</system.web>

установить copy local = true для System.Core и Microsoft.CSharp`

Ответ 5

Есть ли у вас ссылка на Microsoft.CSharp и System.Core?

MVC-представления (обычно) скомпилируются динамически при доступе к вашему сайту, а не при компиляции приложения в VS. Я предполагаю, что вы увидите проблемы при запуске сайта. Просто добавьте две ссылки, и все будет хорошо.

Ответ 6

Используя Peters, мне удалось решить проблему с помощью Html.EditorFor(m = > m.xxx) подчеркнуть ошибки в файлах chtml. Хотя ошибка ViewBar сохраняется. Поэтому я изменил файл web.config следующим образом

<compilation debug="true" targetFramework="4.5.1">
  <assemblies>
    <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    <add assembly="Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
  </assemblies>
</compilation>

Обратите внимание на строку Microsoft.Csharp. Вышеприведенный трюк и теперь редактор chtml ясно из красных подчеркиваний. Спасибо Peter

Ответ 7

У меня была такая же проблема. По умолчанию при создании приложения MVC3 он вставляет файл решения web.debug.config и web.release.config. Когда я избавился от этих двух элементов, проблема ViewBag разрешилась сама. Это может иметь какое-то отношение к тому, что говорил Питер, но я не проверял это.

Ответ 8

Это время, когда считываются другие поля в ViewBag. Поэтому, если вы передаете их от контроллера. ViewBag.yourobjectDto = yourObjectDto;

убедитесь, что эта строка не заблокирована, если условие или что-то.

Ответ 9

Попробуйте

Page.title= "Details1";

Это может сработать.