从.net 4升级到4.5会破坏Javascript中的Html.Raw调用

时间:2012-09-05 05:39:47

标签: asp.net-mvc-4

我在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>

4 个答案:

答案 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中修复此问题。