以下是我正在尝试运行的代码:
// Razor code!
@if (User.Identity.IsAuthenticated) {
// This is Javascript, NOT C#/Razor code. Hence the '@' symbol.
var currentUser = @User.Identity.Name;
} else {
// Also Javascript code!
var currentUser = null;
}
基本上,如果用户登录,我想将其输出为Javascript:
var currentUser = @User.Identity.Name;
如果用户已注销,则为此:
var currentUser = null;
答案 0 :(得分:2)
首先,您需要将其更改为(请记住@User.Identity.Name
周围的引号):
<script type="text/javascript">
var currentUser = null;
@if (User.Identity.IsAuthenticated) {
<text>
currentUser = '@User.Identity.Name';
</text>
}
</script>
然后添加一些javascript:
<script type="text/javascript">
if (currentUser != null) {
document.getElementById('loggedInUser').innerHTML = 'Welcome '+ currentUser;
}
</script>
答案 1 :(得分:1)
一旦你在Razor中开始标记,它就会切换到标记(包括<script>
)。如果您不需要任何标记,请改用<text>
。
如果您需要快速复制/粘贴解决方案,请选择Tim或Adam来完成工作。但是,由于Razor在解析多种语言的混合时使用非常复杂的算法,因此值得提供Phil Haack的Razor part of quick reference(CC-BY许可证允许):
代码块:
@{ int x = 123; string y = "because."; }
表达式(Html编码):
<span>@model.Message</span>
表达式(未编码):
<span> @Html.Raw(model.Message) </span>
组合文字和标记:
@foreach(var item in items) { <span>@item.Prop</span> }
混合代码和纯文本:
@if (foo) { <text>Plain Text</text> }
混合代码和纯文本(替代):
@if (foo) { @:Plain Text is @bar }
电子邮件地址:
Hi philha@example.com
明确表达:
<span>ISBN@(isbnNumber)</span>
转义@符号:
<span>In Razor, you use the @@foo to display the value of foo</span>
服务器端评论:
@* This is a server side multiline comment *@
调用通用方法:
@(MyClass.MyMethod<AType>())
混合表达式和文字:
Hello @title. @name.
我遗漏了Razor代表,因为现在有Razor helpers。
答案 2 :(得分:1)
<script>
@if( User.Identity.IsAuthenticated ) {
<text>var currentUser = "@User.Identity.Name";</text>
}
else {
<text>var currentUser = null;</text>
}
alert(currentUser);
</script>
产生的输出为:
var currentUser = "Foo Bar";
alert(currentUser);
@Adam Plocher的答案显示了一种更清晰的方式来表示它(从服务器脚本中删除JavaScript变量声明)。
一种更简洁,更容易理解的方式来表示它:
<script>
var currentUser = '@(User.Identity.IsAuthenticated ? User.Identity.Name : "Anonymous" )';
alert(currentUser);
</script>