如何从 Razor 切换到普通的旧 HTML? [复制]

Posted

技术标签:

【中文标题】如何从 Razor 切换到普通的旧 HTML? [复制]【英文标题】:How to switch from Razor to plain old HTML? [duplicate] 【发布时间】:2012-09-22 20:01:17 【问题描述】:

可能重复: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;

【问题讨论】:

查看***.com/questions/5614941/… 【参考方案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。

【讨论】:

这是如何回答 OP 的? OP 要求在上下文之间切换。我觉得我的回答很合适。 在该页面中,没有提及切换上下文。您应该清楚 OP 需要的是切换上下文,以及 OP 究竟需要什么。 我不怀疑。我只是说,对于谁提出这个问题,或者谁与 OP 有同样的疑问,这样的链接可能没有多大帮助。如果答案是“请参阅此页面上的示例 4-6”,那将更有帮助。我也会引用这个例子,以防将来的读者无法访问该页面。【参考方案2】:
<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>

【讨论】:

所有答案都被否决了。我想知道这个有什么问题。 我的第一个版本可能会更好。我相信当前的两个样本都回答了这个问题,并且都经过了测试。【参考方案3】:

首先,您需要将其更改为类似(记住您在 @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>

【讨论】:

它可能需要 围绕它...

以上是关于如何从 Razor 切换到普通的旧 HTML? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

示例 AJAX 回调到 ASP.NET Core Razor 页面

Blazor 与 Razor

CentOS7,从一般用户切换到root用户

如何切换到root用户

如何在普通的旧 Ruby 中模拟 SQL `timestamp`?

Linux下如何从普通用户切换到root用户