如何从Razor切换到普通的HTML?

时间:2012-10-01 22:59:20

标签: c# javascript razor

  

可能重复:
  Mix Razor and Javascript code

以下是我正在尝试运行的代码:

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

3 个答案:

答案 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 HaackRazor 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>