使用Visual Studio2012,在Razor视图页面上的JavaScript部分,我得到了我认为是Razor语法与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>
这是Razor中的一个bug吗?如果是这样的话,有没有办法重写这个来避免这个问题呢?
发布于 2012-08-25 14:53:01
这是剃刀中的一个bug吗?
绝对不是。运行您的应用程序,它将按预期工作。
这是您正在使用的工具中的错误(Visual Visual Studio 2012,ReSharper,...)它们不能识别完全有效的语法并警告您一些不应该被警告的东西。您可以尝试在Microsoft Connect站点上打开一个问题,并发出此错误的信号,如果还没有这样做的话。
发布于 2013-04-02 01:56:53
由于这种情况似乎仍然在发生,而且这是一件令人讨厌的事情,我想我至少会让别人知道我最终使用了什么作为“黑客”。我不想忽略这个警告,而是更愿意接受一个更笨拙的语法(是的,有人会说这会扼杀性能:)
我使用的变通方法是在最后添加一个客户端。对我来说,这个错误发生在定义一个“整型”常量时,所以
window.foo = @(Model.Something);
给了我一个很好的分号错误。我只是简单地将其更改为:
window.foo = @Model.Something + 0;
(在陈述问题的情况下,您应该能够添加'',so + '‘。
我知道在客户机上发生了一个完整的添加,它不是很优雅,但它确实避免了错误。所以使用它或者不使用它,但是我更喜欢它而不是看到警告/错误。
如果有人知道服务器端的语法解决方法,我更喜欢这种方法,而不是客户端的方法,所以请添加。
发布于 2014-11-15 09:23:05
我发现,将Razor语法封装在一个JavaScript标识函数中也能让集成开发环境满意。
<script type="text/javascript">
@* I stands for Identity *@
function I(obj) { return obj; }
$().ready(function(){
var customer = I(@Html.Raw(ViewBag.CustomerJSON));
});
</script>
https://stackoverflow.com/questions/12111729
复制相似问题