【问题标题】:Javascript syntax error in razor page剃须刀页面中的 Javascript 语法错误
【发布时间】:2015-02-06 21:07:36
【问题描述】:

我在this link 中找到了将一些数据从我的模型传输到 javascript 对象的解决方案。问题是我在 Visual Studio 中有一个错误,表明分号无效,但是当我尝试运行我的应用程序时,它运行良好。

这是显示错误的屏幕截图:

但是如果我删除分号,我现在有这个错误:

无论如何,javascript 语句应该始终在行尾有一个分号。

如果我在运行我的应用程序时一切正常,这个错误意味着什么?

【问题讨论】:

标签: javascript serialization razor asp.net-mvc-4


【解决方案1】:

您可以尝试将其封闭在一个块中:

var serializedData = @{ 
    Html.Raw(NewtonSoft.Json.JsonConvert.SerializeObject(Model));
};

编辑:此答案仅适用于 VS 2010。V​​S 2012 中的升级也打破了此解决方法。

【讨论】:

  • @crush:实际上深入研究,我们都是正确的,我们都错了。重复链接中已删除的答案之一指向解释原因的问题 (stackoverflow.com/questions/12275095/…)。当我做出这个答案时,我在 Studio 2010 上(因为自 2012 年以来的大多数人只在几个月前出现),显然升级到 2012 年(以及随后的 2013 年)对 JavaScript 解析器进行了更改,打破了这一点。我将对此进行更新以反映这种细微差别,但它确实解释了为什么它当时有效,而不是现在。
  • 根据您的编辑删除了我的 cmets。感谢您维护本网站的有效性。
【解决方案2】:

我刚开始使用 Razor/MVC4,但你能做到这样吗?

@{
    var serializedData = Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model));
}
<script>
    ...
    var serializedData = @serializedData;

【讨论】:

  • 谢谢 epascarello 但错误似乎转移到了@serializedData 变量的分号。
【解决方案3】:

将剃刀代码用引号括起来,如下所示:

var myVar = '@serializedData';

作为 JavaScript 鸭子类型,您在大多数用例中应该没问题。

【讨论】:

  • 如果您将 JSON 放在这些字符串中,则需要在字符串上使用 JSON.parse(...) 以便将其反序列化为 JavaScript 对象。随意这样做可能会减慢页面的执行速度。更好的解决方案是使用标识函数。也就是说,这是此页面上提供的唯一可行的解​​决方案。 查看重复的问题以获得更好的解决方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-01
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
  • 2022-01-07
相关资源
最近更新 更多