ViewBag.Title错误

时间:2011-01-05 14:39:54

标签: asp.net-mvc-3

对抗当前的RC2 - 生成的模板Razor视图包括:

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

}

在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

但是项目正确构建和运行。错误是否表明应该解决的其他问题?

9 个答案:

答案 0 :(得分:16)

我从Web.config文件中的targetFramework元素中删除了<compilation>属性后出现了同样的问题。

我将其恢复到

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

一切都恢复正常!

答案 1 :(得分:9)

我通过以下方式解决了这个问题:

首先我注意到使用gacutil(全局程序集缓存实用程序)它包含两个对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。

答案 2 :(得分:4)

与@ Kaiser的答案类似,由于GAC中有多个System.Core程序集,我遇到了这个问题。

然而,我选择不删除3.5程序集。相反,在Views web.config中,我修改了configuration/system.web/compilation节点,如下所示:

<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节点:它告诉Razor编译器使用哪个GAC程序集版本。

一旦我这样做,我的剃刀观点一切都很好。

答案 3 :(得分:2)

以管理员身份运行VS 2012时,我没有遇到此问题。

否则,对我有用的是什么:

  

在root web config中添加了推荐的引用,以正确的程序集作为编译节点的子句

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

为System.Core和Microsoft.CSharp`

设置copy local = true属性

答案 4 :(得分:1)

您是否引用了Microsoft.CSharpSystem.Core

MVC Views(通常)在您访问站点时动态编译,而不是在VS中编译应用程序时编译。我想你在运行网站时会看到问题。只需添加两个引用就可以了。

答案 5 :(得分:1)

通过使用Peters答案我设法用Html.EditorFor(m =&gt; 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编辑器从红色下划线清楚。 谢谢彼得

答案 6 :(得分:0)

我遇到了完全相同的问题。默认情况下,当您创建MVC3应用程序时,它会在解决方案中粘贴web.debug.config和web.release.config。当我摆脱这两个项目时,ViewBag问题解决了。这可能与彼得在上面所说的有关,但我没有测试过。

答案 7 :(得分:-1)

这是读取ViewBag中其他字段的时间。所以,如果你从控制器传递它们。 ViewBag.yourobjectDto = yourObjectDto;

确保此行不会因条件或其他因素而被阻止。

答案 8 :(得分:-2)

尝试

Page.Title =“Details1”;

它可能会奏效。