使用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>
这是剃刀的错误吗? 如果是这样,是有办法,我可以重写是为了避免这个问题?
这是剃刀的错误吗?
绝对不。 运行应用程序,并预期它会奏效。
它是工具,你正在使用的是不能识别完全有效的语法和警告你的东西,你不应该被警告的错误(的Visual Studio 2012,ReSharper的,...)。 你可以尝试在Microsoft Connect站点打开的问题和信令这个bug如果尚未完成。
由于这似乎仍然发生,这是一个讨厌我想我至少让别人知道我的最终使用的“黑客”。 我不想忽略警告,宁愿接受hokier语法(当然有人会说,这会杀了性能:))
我作为一个变通方法使用是使用客户端除了在最后。 对我来说,在定义“整数”不断发生这个错误,所以
window.foo = @(Model.Something);
给我好老分号错误。 我只是把它改为:
window.foo = @Model.Something + 0;
(在规定的问题情况下,你就应该能够加入“”,所以+“”。
我知道有一个整体另外除了在客户端上发生的事情,这是不优雅,但它避免了错误。 因此,使用或不这样做,但我喜欢这种在看到警告/错误。
如果有人在这个服务器端语法变通办法的知道我宁愿给客户端之一,所以请大家补充。
我发现,包裹在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>
这为我工作:
var customer = @Html.Raw(ViewBag.CustomerJSON + ";")
下面是布尔一种解决方法:
var myBool = @(Model.MyBool ? "true;" : "false;")
这为我工作
@Html.Raw(string.Format("var customer = {0};", ViewBag.CustomerJSON));
<script type="text/javascript">
$().ready(function(){
var customerName = ('@ViewBag.CustomerName'); // <- wrap in parens
});
</script>
是不是很简单的在括号包装? 通过控制台把价值观似乎做工精细,无副作用。
它适用于字符串,但它仍然给出了错误的不带引号的值,但我还是很喜欢这个字符串值。 对于数字你可以只使用parseInt('@Model.TotalResultCount', 10)