Javascript Json.Encode在CS文件中工作,但不在CSHTML中工作

Javascript Json.Encode在CS文件中工作,但不在CSHTML中工作,javascript,json,asp.net-mvc-4,razor,Javascript,Json,Asp.net Mvc 4,Razor,在我的CS文件中,我正在执行以下命令,并且它按照预期工作 using System.Web.Helpers; String json = System.Web.Helpers.Json.Encode(null); 然而,在我的CSHTML文件中,我执行了以下命令,在这里,我得到了一个关于在上下文中无法识别Json的错误 @{ Layout = null; } @using TestService.ServiceReference; @using System.Web.Helpers; <

在我的CS文件中,我正在执行以下命令,并且它按照预期工作

using System.Web.Helpers;
String json = System.Web.Helpers.Json.Encode(null);
然而,在我的CSHTML文件中,我执行了以下命令,在这里,我得到了一个关于在上下文中无法识别Json的错误

@{ Layout = null; }
@using TestService.ServiceReference;
@using System.Web.Helpers;
<!DOCTYPE html>
<html>
...
<script type="text/javascript">
  var output3 = "! @Html.Raw(Json.Encode(ViewBag.MyArray))";
...
@{Layout=null;}
@使用TestService.ServiceReference;
@使用System.Web.Helpers;
...
var output3=“!@Html.Raw(Json.Encode(ViewBag.MyArray))”;
...
如何解释/补救?谷歌给了我娜达,零,齐奇

编辑 我已经按照建议将Assemblys标记添加到我的配置文件中,但是我得到的错误是,它对于配置来说是未知的。这就是我的(根)配置的样子

<system.web>
  <compilation debug="true" targetFramework="4.0" />
  <assemblies>
    <add assembly="System.Web.Helpers, Version=2.0.0.0, 
                  Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  </assemblies>
  ...

...
但是,我注意到我的配置文件中有以下内容。我猜这是等效的。是吗

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


确保您在项目中引用了
System.Web.Helpers
,并将“copy local”设置为true我能够重新创建您的问题,也找到了解决方案。至于这个解决方案为什么有效,我不能说,但以下是我遵循的步骤

1.从一个新的MVC4项目(Basic)中,我创建了一个带有以下标记的视图(注意ReSharper 7没有抱怨)

5.重新编译,这是结果HTML页面输出sans错误

<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <link href="/Content/site.css" rel="stylesheet"/>

    <script src="/Scripts/modernizr-2.6.2.js"></script>

</head>
<body>


<script type="text/javascript">
    var stuff = "! ["apples","oranges","bananas"]";
    alert(stuff);
</script>

<h2>Index</h2>


    <script src="/Scripts/jquery-1.8.2.js"></script>


</body>
</html>

指数
var stuff=“![“苹果”、“橙子”、“香蕉”];
警惕(东西);
指数

@Html.Raw(System.Web.Helpers.Json.Encode(ViewBag.MyArray))
?不。首先我已经测试过了(这就是为什么我要输出3,呵呵)。同样的错误行为(@KonradViltersten
ViewBag.MyArray
的数据类型是什么?@Kami这是一个字典,但我不认为这是问题所在,因为它在服务器端工作,但在客户端不工作(Json类一开始就找不到,所以类型错误不太可能是原因).#4通常是原因。你让IDE帮你解决。我怀疑@KonradViltersten解决了not@KonradViltersten-您在web.config中找到的映射规则也存在于我的中,我仍然在clean项目中发现了错误。此外,如果您仔细查看我发布的配置,这些规则是编译XML元素的子元素nt这就是为什么我对自动关闭编译标签发表评论的原因,你需要打开它:可怕的挖掘,兄弟。高度怪异的错误…:)我正在CS文件中成功地执行代码,并且我在CS和CSHTML文件中都有使用。这是否等同于确保参考System.Web.Helpers,或者我还能做些什么?另外,请详细说明copy local=true。看看Bjarecks对这个问题的回答,为什么?它根本没有解决我的问题。我不会错过集会的。只是在客户端找不到它们。
  <system.web>
    <httpRuntime targetFramework="4.5" />
    <compilation debug="true" targetFramework="4.5">
      <!--Add the following.  Ensure compilation is not self closing,
          it was on mine-->    
      <assemblies>
        <add assembly="System.Web.Helpers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      </assemblies>
    </compilation>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <link href="/Content/site.css" rel="stylesheet"/>

    <script src="/Scripts/modernizr-2.6.2.js"></script>

</head>
<body>


<script type="text/javascript">
    var stuff = "! ["apples","oranges","bananas"]";
    alert(stuff);
</script>

<h2>Index</h2>


    <script src="/Scripts/jquery-1.8.2.js"></script>


</body>
</html>