1

我一直在寻找如何将 razor 和 JavaScript 混合在一起。我发现了这样的事情:

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

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

4

2 回答 2

1

好吧,这就是剃须刀的工作原理。它使用括号和标签开始/结束来区分 C# 代码和生成的 HTML

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

  • 遇到相应的右括号
  • 打开一个标签。

然后,打开的标签将被视为 html,直到遇到 @ 或相应的结束标签。有时,您想从 c# 切换到 HTML(或 js),但又不想添加标签……然后为您添加特殊的标签 ID。它没有渲染,只是在这里告诉剃须刀将 rom C# 切换到生成的输出

于 2013-08-01T09:15:01.337 回答
1

使用标签的原因<text>…&lt;/text>是为了解决由于您将两种在许多情况下语义相同的语言混合在一起而产生的歧义问题。

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

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

当你意识到你可以在块内添加另一个逃生时,事情会变得有点冒险。<text>…&lt;/text>就像任何东西一样,尽管您会谨慎使用它。如果您在混合两者时遇到很多麻烦并且无法弄清楚在哪里添加文本块,那么在您更好地理解它之前,您可能不应该使用它(在生产中)。

于 2015-08-04T18:46:52.970 回答