剃刀/ JavaScript和尾随分号(Razor/JavaScript and trailing

2019-06-17 21:12发布

使用Visual Studio 2012,一个Razor视图页面上,在JavaScript部分,我得到什么,我认为是剃刀语法之间的战斗VS JavaScript语法。 特别是,在脚本部分尾随分号被IntelliSense和编译器警告(不是错误)传送标记:

“警告13语法错误”。

如果我删除它,然后我得到一个语句终止建议( ReSharper的在这种情况下,只是很好的做法)。

<script type="text/javascript">
    $().ready(function(){
        var customer = @Html.Raw(ViewBag.CustomerJSON);  // <- Razor (I think) doesn't like this semicolon
    });
</script>

这是剃刀的错误吗? 如果是这样,是有办法,我可以重写是为了避免这个问题?

Answer 1:

这是剃刀的错误吗?

绝对不。 运行应用程序,并预期它会奏效。

它是工具,你正在使用的是不能识别完全有效的语法和警告你的东西,你不应该被警告的错误(的Visual Studio 2012,ReSharper的,...)。 你可以尝试在Microsoft Connect站点打开的问题和信令这个bug如果尚未完成。



Answer 2:

由于这似乎仍然发生,这是一个讨厌我想我至少让别人知道我的最终使用的“黑客”。 我不想忽略警告,宁愿接受hokier语法(当然有人会说,这会杀了性能:))

我作为一个变通方法使用是使用客户端除了在最后。 对我来说,在定义“整数”不断发生这个错误,所以

window.foo = @(Model.Something);

给我好老分号错误。 我只是把它改为:

window.foo = @Model.Something + 0;

(在规定的问题情况下,你就应该能够加入“”,所以+“”。

我知道有一个整体另外除了在客户端上发生的事情,这是不优雅,但它避免了错误。 因此,使用或不这样做,但我喜欢这种在看到警告/错误。

如果有人在这个服务器端语法变通办法的知道我宁愿给客户端之一,所以请大家补充。



Answer 3:

我发现,包裹在JavaScript身份功能的剃刀语法也使得IDE高兴。

<script type="text/javascript">
    @* I stands for Identity *@
    function I(obj) { return obj; }
    $().ready(function(){
        var customer = I(@Html.Raw(ViewBag.CustomerJSON));
    });
</script>


Answer 4:

这为我工作:

var customer = @Html.Raw(ViewBag.CustomerJSON + ";")


Answer 5:

下面是布尔一种解决方法:

var myBool = @(Model.MyBool ? "true;" : "false;")


Answer 6:

这为我工作

@Html.Raw(string.Format("var customer = {0};", ViewBag.CustomerJSON));


Answer 7:

<script type="text/javascript">
    $().ready(function(){
        var customerName = ('@ViewBag.CustomerName');  // <- wrap in parens
    });
</script>

是不是很简单的在括号包装? 通过控制台把价值观似乎做工精细,无副作用。

它适用于字符串,但它仍然给出了错误的不带引号的值,但我还是很喜欢这个字符串值。 对于数字你可以只使用parseInt('@Model.TotalResultCount', 10)



文章来源: Razor/JavaScript and trailing semicolon