Javascript Json.Encode在CS文件中工作,但不在CSHTML中工作
在我的CS文件中,我正在执行以下命令,并且它按照预期工作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; <
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,呵呵)。同样的错误行为(@KonradVilterstenViewBag.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>