混合使用JavaScript和Razor语法

时间:2013-08-01 09:05:56

标签: javascript asp.net-mvc razor

我一直在寻找如何将razor和JavaScript混合在一起。我找到了类似的东西:

<script type="text/javascript">
var currentUser = null;
@if (User.Identity.IsAuthenticated) {
    <text>
        currentUser = '@User.Identity.Name';
    </text>
}
</script>

为什么名为currentUser的变量被<text></text>标记包围? <text>标签的含义是什么?如果我们省略该文本标签,那么会发生任何错误吗?

2 个答案:

答案 0 :(得分:1)

嗯,这就是剃须刀的工作原理。它使用括号和标签begin / end来区分生成的HTML中的c#代码

当你打开一个括号时,它会考虑代码直到:

  • 遇到相应的结束括号
  • 打开标签。

然后,打开的标记将被视为html,直到遇到@或correspoding结束标记。 有时,您希望从c#切换到HTML(或js),但您不想添加标签...然后为您提供特殊标签ID。它没有渲染,只是告诉剃刀将rom C#切换为生成的输出

答案 1 :(得分:1)

<text>…</text>标签的原因是解决由于将两种语言混合在一起而产生的歧义问题,这些语言在许多情况下在语义上是相同的。

如果要在Razor语法的C#if语句中指定动态java脚本逻辑,并且在这些块中有java脚本if语句,它将如何区分两者之间的上下文?

问题是:它不能;可能性,程序员也不可能。 <text>…</text>标记是一个特殊的Razor块(仅限C#块内)样式转义,它表示:这绝对(可能)不是此块中的C#代码。

当您意识到可以在<text>…</text>块中添加另一个转义时,事情变得有点冒险。像任何东西一样你会谨慎使用它。如果您在混合两者方面遇到很多麻烦并且无法找出添加文本块的位置,那么在您更好地理解它之前,您不应该使用它(在生产中)。