4

我在 ac#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>
4

4 回答 4

4

请对此连接问题添加投票。我们将在下一个版本的 VS 中解决这个问题。我已将您的复制代码附加到此错误中,并添加了指向此帖子的链接作为该问题的另一种表现形式。

于 2012-10-12T21:40:52.620 回答
1

此问题在 Visual Studio 2013 SP 2 中仍然存在

要修复此警告消息,请先初始化 javascript 变量。如果任何 var 后跟 @,IMO Visual Studio 认为 var 是隐式类型的。

        var ListData;
        var PagerData;
        ListData =  @(Html.Raw(listData));
        PagerData =  @(Html.Raw(pagerData));
于 2013-06-19T17:25:40.163 回答
1

我正在使用 MVC5 并发现相同的问题,所以我以这种方式解决了它,它应该适用于所有版本

@Html.Raw("var myData = " +  Json.Encode(this.Model.MyData) + ";" )

但是,我只会在最简单的情况下使用它,因为您会丢失任何关于 VAR 类型的智能感知(尽管它确实将其视为全局实例并且编译器不会抛出 wobbler),所以现在我认为一个初始的、空的定义可能是最好的方法。

于 2013-11-28T11:33:54.397 回答
0

我也发生过同样的事情,但它是随机发生的。我试图解决的问题如下:

确保您可以在调试模式下编译/构建/调试,切换到发布模式并尝试从该模式进行调试/发布。切换回调试模式并重新尝试发布。

切换模式的一些组合可以解决问题,我只是无法确定它到底是什么。一旦你让它工作,不要关闭 VS ;-)

让我们希望 MS 在 SP1 中解决这个问题。

于 2012-11-14T21:01:57.763 回答