【问题标题】:Mixing JavaScript and Razor syntax混合 JavaScript 和 Razor 语法
【发布时间】:2015-08-05 02:46:52
【问题描述】:

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

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

为什么名为currentUser的变量被&lt;text&gt;&lt;/text&gt;标签包围? &lt;text&gt; 标签是什么意思?如果我们省略了那个文本标签,那么会发生什么错误吗?

【问题讨论】:

  • 这不是一个真正的问题。 “如果……会发生什么”试试看。你有代码在你面前,你可以测试它。 StackOverflow 不是众包编译器。至少,您可以表明您愿意学习并尝试理解问题。你可以搜索一下,你会发现how to use text tag in MVC 3 razor
  • 如果我这样写代码会出现错误吗? @if (User.Identity.IsAuthenticated) { currentUser = '@User.Identity.Name'; }

标签: javascript asp.net-mvc razor


【解决方案1】:

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

当你打开一个括号时,它认为代码直到:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-09-18
      • 1970-01-01
      • 2017-08-20
      • 2011-05-02
      • 1970-01-01
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多