asp.net-mvc-3 - 使用 MVC Razor 在 if/else 中混合文本和函数

标签 asp.net-mvc-3 razor

我在局部 View 中有以下代码:

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

预期输出(带有适当的操作链接):
  • 如果登录:你好吉姆 |注销
  • 如果未登录:登录

  • 但是,这会导致错误:
  • 在 VS 中,单词“Hello”有一个错误:“Cannot resolve symbol 'Hello'”和“&#” has “Expression expected”
  • 在浏览器中,我得到“CS1040:预处理器指令必须作为行上的第一个非空白字符出现”

  • 如果我放一个 <p>...</p>在以“Hello”开头的行周围,错误消失了。

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

    最佳答案

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

    如果您想将文本直接放入代码块中,您有以下三种选择:

  • 将其包裹在任何 HTML 标签中
  • 用专用 Razor 包裹它<text>标签,它只会渲染没有标签的文本
  • 在行前加上 @: , 相当于

  • SottGu's blog post .

    关于asp.net-mvc-3 - 使用 MVC Razor 在 if/else 中混合文本和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10209973/

    相关文章:

    c# - 如何将枚举值序列化为字符串?

    asp.net-mvc - 类型 'System.Web.Mvc.MvcWebRazorHostFactory' 的表达式不能用于返回类型 'System.Web.WebPages.Razor.WebRazorHostFactory'

    带有一些 Razor 的 Javascript 无法在外部工作

    asp.net-mvc - 有没有办法在[必填]字段旁边自动显示 “*” 必填图标

    c# - Ajax.BeginForm 导致重定向到部分 View 而不是就地 View

    asp.net-mvc-3 - 将 asp.net 成员身份迁移到 Windows Azure

    asp.net - If else 在 Web 网格列中

    c# - MVC5 Razor View String.Join 每次迭代时反转顺序

    c# - ASP.NET MVC View : The name 'inject' does not exist in the current context

    javascript - 在 C# 和 Fabric.js 中添加对象并保存图像