我在c#MVC 3 razor页面中有以下代码,我将序列化数据传递给KnockoutJs的javascript变量:
@{
var listData = new JavaScriptSerializer().Serialize(Model.ListItems);
var pagerData = new JavaScriptSerializer().Serialize(Model.Pager);
}
// additional code
<script type="text/javascript" >
var ListData = @(Html.Raw(listData)); // <-- Syntax Error here
var PagerData = @(Html.Raw(pagerData)); // <-- Syntax Error here
// additional js code
</script>
升级到VS 2012后,我在上面的Html.Raw行末尾的javascript分号后得到错误曲线。该项目符合,但VS 2012在每行的错误列表中显示“语法错误”。如果没有分号,javascript也会显示“语法错误”。
此代码在先前版本中没有问题。这是VS 2012解析器中的错误吗?有没有办法避免生成的错误?
修改 其他人看到这个问题?以下是在新页面中隔离相同问题的简化版本。如果在ListData行的末尾添加一个分号,则会出现javascript语法错误,而不会出现下一行的错误。这是VS2010和VS2012之间的javascript编译器中的错误吗?
@{
var listData = "test";
var pagerData = "test2";
}
<script type="text/javascript" >
var ListData = @(Html.Raw(listData))
var PagerData = @(Html.Raw(pagerData))
</script>
答案 0 :(得分:4)
请对此connect issue添加投票。我们将在下一版本的VS中解决此问题。我已将您的repro代码附加到此错误,并添加了此帖子的链接作为该问题的另一个表现形式。
答案 1 :(得分:1)
Visual Studio 2013 SP 2中仍存在此问题
要修复此警告消息,请先初始化javascript变量。如果任何var后跟@。
,IMO Visual studio认为var是隐式输入的 var ListData;
var PagerData;
ListData = @(Html.Raw(listData));
PagerData = @(Html.Raw(pagerData));
答案 2 :(得分:1)
我正在使用MVC5并找到相同的问题,所以我用这种方式解决了它,它应该适用于所有版本
@Html.Raw("var myData = " + Json.Encode(this.Model.MyData) + ";" )
但是,我只会在最简单的情况下使用它,因为你失去了任何关于VAR类型的智能感知(尽管它确实将它视为全局实例并且编译器不会抛出摇摆器),所以现在我认为初始的,空的定义可能是最好的方法。
答案 3 :(得分:0)
我有同样的事情发生,但它是随机发生的。 我试图解决的问题如下:
确保您可以在调试模式下编译/构建/调试,切换到发布模式并尝试从该模式调试/发布。 切换回调试模式并重新尝试发布。
切换模式的某种组合可以解决问题,我只能确切地说明它是什么。 一旦你开始工作,不要关闭VS; - )
让我们希望MS在SP1中修复此问题。