Kon*_*ten 4 javascript json razor asp.net-mvc-4
在我的CS文件中,我正在执行以下操作,它按预期工作.
using System.Web.Helpers;
String json = System.Web.Helpers.Json.Encode(null);
Run Code Online (Sandbox Code Playgroud)
但是,在我的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))";
...
Run Code Online (Sandbox Code Playgroud)
怎么解释/补救?谷歌搜索给了我nada,零,ziltch ......
我已按照建议将CONFIG文件添加到程序集标记中,但我得到的错误是配置未知.这就是我的(根)CONFIG的样子.
<system.web>
<compilation debug="true" targetFramework="4.0" />
<assemblies>
<add assembly="System.Web.Helpers, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
...
Run Code Online (Sandbox Code Playgroud)
但是,我注意到我确实在CONFIG文件中有以下内容.我猜它是等价的.是吗?
<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>
Run Code Online (Sandbox Code Playgroud)
我能够重新创建您的问题,并找到了解决方案.至于为什么这个解决方案有效,我不能说,但这是我遵循的步骤.
1.从一个新的MVC 4项目(基础),我创建了一个带有以下标记的视图(注意ReSharper 7没有投诉)
@{
ViewBag.Title = "Index";
ViewBag.Array = new string[] {"apples", "oranges", "bananas"};
}
<script type="text/javascript">
var stuff = "! @Html.Raw(Json.Encode(ViewBag.Array))";
alert(stuff);
</script>
<h2>Index</h2>
Run Code Online (Sandbox Code Playgroud)
2.编译并运行应用程序,收到以下错误: CS0103: The name 'Json' does not exist in the current context.
3.试图在View中导入名称空间,将组件添加到Views web.config,确保在项目中正确引用.这些都没有影响.
4. 解决方案<assemblies>
<add assembly="System.Web.Helpers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>在编译部分(主web.config,而不是Views文件夹)中 添加了以下行()到我的web.config中
<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>
Run Code Online (Sandbox Code Playgroud)
5.Recompile,这里是生成的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>
Run Code Online (Sandbox Code Playgroud)