3

可能重复:
混合 Razor 和 Javascript 代码

这是我要运行的代码:

    // 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;
4

3 回答 3

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>
于 2012-10-01T23:03:14.830 回答
1

一旦您在 Razor 中开始标记,它就会切换到标记(包括<script>)。如果您不需要任何标签,请<text>改用。

如果您需要快速复制/粘贴解决方案,请使用 Tim 或 Adam 的解决方案。但是,由于 Razor 在解析多种语言的混合时使用了相当复杂的算法,因此值得提供Phil HaackRazor 部分的完整快速参考(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 代表。

于 2012-10-01T23:01:55.717 回答
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>
于 2012-10-01T23:21:41.373 回答