【问题标题】:Mixing text and functions inside an if/else with MVC Razor使用 MVC Razor 在 if/else 中混合文本和函数
【发布时间】:2012-04-18 13:04:42
【问题描述】:

我在局部视图中有以下代码:

@if (Request.IsAuthenticated)
{
    Hello, @Html.ActionLink(User.Identity.Name, "ChangePassword", "Account") | Html.ActionLink("Log off", "LogOff", "Account")
}
else
{
    @Html.ActionLink("Log in", "Login", "Account")
}

预期输出(带有相应的操作链接):

  • 如果已登录:您好 Jim |注销
  • 如果未登录:登录

但是,这会导致错误:

  • 在 VS 中,单词“Hello”有错误:“无法解析符号 'Hello'”并且“”具有“预期表达式”
  • 在浏览器中我得到“CS1040:预处理器指令必须显示为一行上的第一个非空白字符”

如果我在以“Hello”开头的行周围加上<p>...</p>,错误就会消失。

我对@9​​87654323@ 的混合调用和同一行中的文本显然存在一些语法错误。这样做的正确方法是什么?

【问题讨论】:

    标签: asp.net-mvc-3 razor


    【解决方案1】:

    代码块 ({ ... }) 的内容应该是代码,而不是标记。

    如果你想将文本直接放在代码块中,你有三种选择:

    • 将其包装在任何 HTML 标记中
    • 将其包装在特殊的 Razor <text> 标签中,这将只呈现没有标签的文本
    • 在行前加上@:,相当于

    SottGu's blog post

    【讨论】:

    • 我不同意代码块的内容不应该是标记的说法。 Razor 的重点是能够混合 C#/VB.NET 代码和标记。
    • @JLRishe:是的,但是 Razor 无法知道 Hello 应该是标记而不是代码。
    • 没错,但Hello 不是标记。 :) 更准确的说法是“代码块的内容应该是代码或标记(标签),而不是纯文本。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 2012-01-06
    相关资源
    最近更新 更多