如何从 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 页面