使用MVC Razor在if/else中混合文本和函数

Yaa*_*lis 20 razor asp.net-mvc-3

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

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

预期产出(与行动有适当的联系):

  • 如果登录:Hello Jim | 注销
  • 如果未登录:登录

但是,这会导致错误:

  • 在VS中,单词"Hello"上有一个错误:"无法解析符号'Hello'"而"&#"有"表达式预期"
  • 在浏览器中,我得到"CS1040:预处理器指令必须作为第一个非空白字符出现在一行"

如果我<p>...</p>以"Hello"开头的那条线,那么错误就会消失.

我的混音调用@Html和同一行内的文本显然存在一些语法错误.这样做的正确方法是什么?

SLa*_*aks 54

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

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

  • 将其包装在任何HTML标记中
  • 将其包装在特殊的Razor <text>标签中,该标签只会呈现没有标签的文本
  • 在前面添加@:等效的行

请参阅SottGu的博客文章.

  • 确实如此,但“Hello”不是标记。:) 更准确的说法是“代码块的内容应该是代码或标记(标签),而不是纯文本。” (6认同)