Razor/JavaScript和追踪分号
使用Visual Studio 2012,在Razor视图页面的JavaScript部分,我得到了我认为是Razor语法与JavaScript语法之间的争斗。特别是,在脚本部分的尾随分号通过智能感知标记和编译器警告(不是错误)交付:Razor/JavaScript和追踪分号
“警告13语法错误”。
如果我删除它,然后我得到一个声明终止建议(ReSharper在这种情况下,但只是良好的做法)。
<script type="text/javascript">
$().ready(function(){
var customer = @Html.Raw(ViewBag.CustomerJSON); // <- Razor (I think) doesn't like this semicolon
});
</script>
这是Razor中的错误吗?如果是这样,有没有办法我可以重写这个来避免这个问题?
这是Razor中的错误吗?
绝对不是。运行你的应用程序,它会按预期工作。
它是在工具使用的是(视觉 工作室 2012,ReSharper的,...)都不能确认完全有效的语法和警告你的东西,你不应该被警告的错误。您可以尝试在Microsoft Connect站点上打开一个问题,并发出此错误信号(如果尚未完成)。
很好的回答! :) –
:(Resharper bug? – felickz
看起来像这里有一个连接错误:https://connect.microsoft.com/VisualStudio/feedback/details/777108/syntax-parse-error-on-javascript-asp- net-razor-view –
由于这种情况似乎仍在发生,而且我认为我至少会让别人知道我最终用作“黑客”的麻烦。我不想忽视这个警告,宁愿接受一个更好的语法(是的,有人会说这会杀死性能:))
我用作解决方法是在客户端添加结束。对我来说,在定义“整数”不断发生这个错误,所以
window.foo = @(Model.Something);
给我好老分号错误。我只是把它改为:
window.foo = @Model.Something + 0;
(在说的问题情况下,你就应该能够加入“”,所以+“”
我知道有一个整体另外除了在客户端上发生的事情。它不是优雅的,但它确实避免了错误,所以使用它或不使用,但我更喜欢看到警告/错误。
如果有人知道服务器端语法解决方法会喜欢这个到客户端,所以请添加。
这对我有效:
var customer = @Html.Raw(ViewBag.CustomerJSON + ";")
这可以工作,除非你在一行中有两个'var'声明。然后剃刀在第二个怪胎上出现。 – Paul
下面是布尔一种解决方法:
var myBool = @(Model.MyBool ? "true;" : "false;")
这为我工作
@Html.Raw(string.Format("var customer = {0};", ViewBag.CustomerJSON));
我发现,包裹在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>
<script type="text/javascript">
$().ready(function(){
var customerName = ('@ViewBag.CustomerName'); // <- wrap in parens
});
</script>
是不是很简单的在括号包装?通过控制台输入值似乎可以正常工作,没有副作用。
它适用于字符串,但它仍然给非引用值的错误,但我仍然喜欢这个字符串值。对于数字,您可以使用parseInt('@Model.TotalResultCount', 10)
。
如果你真的肛门关于它..像一些人的提示'..你可以做一些像'@ Html.Raw(ViewBag.CustomerJSON)+'';'因为JavaScript验证器期待整数或文本。它对结果完全没有影响,但消除了红色的波浪曲线。警告:过度使用可能会在以后灼伤你的眼睛。 – ppumkin
另一个骇人的解决方法:'var data = [@ Json.Encode(someObject)] [0];'适用于返回JSON对象的c#调用,而不是字符串或数字。 – Drewmate
我不会建议为每个javascript值创建数组,只是为了缓解IDE问题。 – crush