为什么Razor会在html模式下解析这个问题?

时间:2014-04-12 16:26:12

标签: asp.net-mvc razor

我正在制作一个可重复使用的软件包,为了让客户端同时使用直接的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参与其中! (好吧,如果解析~会很好,但说实话,我可以自己解决这个问题。)

我尝试使用@:为每一行添加前缀并围绕@" ... "@中的所有内容,但似乎都不起作用。

2 个答案:

答案 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的一个错误。会报告。