【问题标题】:Can't get the html render conditionally?无法有条件地获取 html 渲染?
【发布时间】:2017-11-14 04:23:02
【问题描述】:

我在使用 asp.net core 2.0 有条件地获取 html 页面呈现时遇到了一个奇怪的事件

    <head>
        @{
                var user = await _userManager.FindByNameAsync(User.Identity.Name);
         }
    </head>
    <body>
     @if (user != null)
     {
       <a href="/user/edit/?username=@user.UserName" class="dropdown-toggle">
       <span class="hidden-xs">@user.FullName</span>
                                   </a>
     }
   </body>

对于这个布局,它给出了错误:“名称'user'在当前上下文中不存在它曾经在.net core 1.1和经典asp.net中工作正常。

但是,如果我确实喜欢这样,那么它就可以正常工作。好奇怪。

<body>
@{
    var user = await _userManager.FindByNameAsync(User.Identity.Name);
   if (user != null)
    {
      <a href="/user/edit/?username=@user.UserName" class="dropdown-toggle">
       <span class="hidden-xs">@user.FullName</span>
                               </a>
     }
 }

【问题讨论】:

    标签: c# asp.net-mvc asp.net-core asp.net-core-2.0


    【解决方案1】:

    您似乎无法在“head”标签内声明变量。我尝试了以下方法,效果很好:

    @{
        var user = await _userManager.FindByNameAsync(User.Identity.Name);
    }
    <head>
        ...
    </head>
    <body>
    @if (user != null)
    {
        <a href="/user/edit/?username=@user.UserName" class="dropdown-toggle">
            <span class="hidden-xs">@user.FullName</span>
        </a>
    }
    </body>
    

    【讨论】:

    • 如果我在标题上设置断点,它确实会显示正确的值,但不知何故它仍然会导致正文错误。
    • 我的猜测是因为 razor 将 head 和 body 视为不同的“范围”,但是当您将代码移到 head 标签之外时,它会成为当前文档的全局
    • 真的很奇怪,它在所有其他版本中都有效。谢谢你敏锐的眼睛:D
    猜你喜欢
    • 2018-01-24
    • 2022-12-13
    • 2012-06-04
    • 2018-06-30
    • 2014-11-26
    • 2012-11-20
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    相关资源
    最近更新 更多