【问题标题】:Upgrade from .net 4 to 4.5 breaks Html.Raw call in Javascript从 .net 4 升级到 4.5 会中断 Javascript 中的 Html.Raw 调用
【发布时间】:2012-08-29 19:09:52
【问题描述】:

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

【问题讨论】:

  • 没有。至少不在这个项目所在的机器上。
  • 我认为这可能是一个更清晰的事情,因为我回到旧版本并认为问题已经消失,但它没有。虽然我只在奇数行上得到它,而不是每一行。
  • 你提到项目编译。生成的 HTML 看起来是否正确,例如使用格式良好的 Javascript?还是看起来像是被双重编码或格式错误?
  • 在 VS2013 中仍未修复。连接是虫子的黑洞。我真的相信他们会在 connect 中找到有意留在产品中的问题列表。

标签: asp.net-mvc-4


【解决方案1】:

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

【讨论】:

  • 很高兴看到在这个问题上有一些进展。即使已经登录到 Connect 站点,上面的链接也对我不起作用 (404)。你能检查一下链接吗?
  • 链接适用于我的 live id.. 产品是视觉工作室。标题说“有效的 javascript/Razor 语法标记为语法错误” by notken_uk
  • 谢谢。我一定没有正确的权限或其他东西。 URL 包含该标题,但内容是“找不到页面”。
  • 您可以尝试提交新的连接问题并告诉我反馈 ID 吗?我会以骗子的身份解决您的问题。
  • 为了注册 Visual Studio 的 bug,我完成了一些其他问题和注册。在该过程结束时,我能够访问上面的页面。谢谢。
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

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

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

            var ListData;
            var PagerData;
            ListData =  @(Html.Raw(listData));
            PagerData =  @(Html.Raw(pagerData));
    

    【讨论】:

    • 这似乎在 VS2012 中不起作用。我仍然收到语法错误。
    【解决方案4】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-25
      相关资源
      最近更新 更多