繁体   English   中英

混合使用JavaScript和Razor语法

[英]Mixing JavaScript and Razor syntax

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

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

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

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

当您打开方括号时,它会考虑以下代码:

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

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

使用<text>…</text>标记的原因是为了解决由于将两种在语义上相同的语言混合在一起而导致的歧义问题。

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

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

当您意识到可以在<text>…</text>块内添加另一个转义<text>…</text>时,事情会变得有些混乱。 像任何东西一样,尽管您会谨慎使用它。 如果您在将两者混合使用时遇到很多麻烦,并且无法弄清楚在何处添加文本块,那么很可能您不应该在生产中使用它,除非您对它有所了解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM