我确信我在Razor引擎中发现了一个错误。以下.cshtml文件是从较大的文件中剪切掉的,但问题仍然存在。
@{ string myVar = "code that does not compile"; }
@section Scripts {
<script type="text/javascript">
function foobar() {
@if (true) {
<text>
for (var i = 0; i < 100; i++) {
@* An arbitrary comment *@
if ("@(myVar)" === "code that does not compile") {
console.log("@("code that does compile")");
}
}
</text>
}
}
</script>
}
实际上,这是一个有效的.cshtml文件。 Intellisense按预期工作,并在浏览器中编译。
问题在于,如果我删除“任意注释”行,突然if语句的条件停止编译。 Intellisense不再将其识别为Razor标记,并且在渲染时不再编译。然而,console.log
行中的Razor代码继续按预期编译。
这是一个相当随意的问题的例子,但它在不同场景中反复出现,这让我很生气。我不得不插入随机Razor注释以使标记编译正确。
发生了什么事?