混合JavaScript和Razor语法

混合JavaScript和Razor语法,javascript,asp.net-mvc,razor,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> var curren

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

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

var currentUser=null;
@if(User.Identity.IsAuthenticated){
currentUser='@User.Identity.Name';
}

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

好吧,这就是razor的工作原理。它使用括号和标记begin/end将c代码与生成的HTML区分开来

打开括号时,它将考虑代码,直到:

  • 遇到相应的结束括号
  • 一个标签被打开
然后,在遇到@或相应的结束标记之前,打开的标记将被视为html。 有时,您想从c#切换到HTML(或js),但不想添加标记。。。然后是你的特殊标签id。它不是呈现的,只是在这里告诉razor将rom C切换到生成的输出

使用
..
标记的原因是为了解决在许多情况下由于将语义相同的两种语言混合在一起而产生的歧义问题

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

问题是:它不能;很可能,程序员也不能。
标记是一种特殊的Razor块(仅在C块内部)样式的转义,表示:这肯定(可能)不是此块中的C代码


当您意识到可以在
块中添加另一个转义时,事情就变得有点危险了。尽管你会小心地使用它。如果您在混合这两种功能时遇到很多问题,并且无法确定在何处添加文本块,那么在您更好地理解它之前,您不应该(在生产中)使用它。

看看这不是一个真正的问题。“如果……”怎么办。试试看。你面前有代码,你可以测试它。StackOverflow不是一个众包编译器。至少,你可以表现出你愿意学习并试图理解这个问题。您可以在搜索的地方进行搜索。如果我这样编写代码,那么会发生错误吗@如果(User.Identity.IsAuthenticated){currentUser='@User.Identity.Name';}