我正在制作一个可重复使用的软件包,为了让客户端同时使用直接的javascript和模块加载器,我有一个代码路径,需要我document.write
输出脚本标记。
在我的剃刀视图中,我有类似的东西:
<script>
...
document.write([
'<script type="text/javascript" src="~/Oaf/SlimHeader/Media/Scripts/jquery-1.9.1.min.js"></script>',
'<script type="text/javascript" src="~/Oaf/SlimHeader/Media/Scripts/jquery-migrate-1.2.1.min.js"></script>',
].join('\n'))
...
</script>
哪种Razor拒绝在html模式下解释:
分析器错误消息:未终止的字符串文字。字符串开始 带引号(“)必须在结束前终止 线。但是,以@和引号(@“)开头的字符串 可以跨越多行。
表示错误在第一个脚本标记中。这是javascript,我不想让Razor参与其中! (好吧,如果解析~
会很好,但说实话,我可以自己解决这个问题。)
我尝试使用@:
为每一行添加前缀并围绕@" ... "@
中的所有内容,但似乎都不起作用。
答案 0 :(得分:2)
这不是剃刀问题,即使在简单的HTML文件中,此代码也无效,并且会在浏览器中出现问题。
解决方案是:
var a = '<script><' +' /script>';
该错误已按设计关闭。
答案 1 :(得分:1)
感谢Aron让我把它削减,从而促使我发现答案。
减少破碎的代码看起来像这样(我没有在问题中包含if
):
@if (true) {
<script type="text/javascript">
var a = '<script></script>';
</script>
}
在ping中@if
和<script>
标签之间的相互作用中的某些内容并不合适。如果我通过前缀if
强制@:
内的每一行上的文字模式,那么它就有效。
在原始问题解决方案中,它使用@:
在Razor块内的每个行前缀。 <text>
块中的周围环境无法正常工作。如果你没有为每个行加上@:
前缀,那么你很可能会得到 前缀的行的解析错误。
看起来像是Razor的一个错误。会报告。