0

我最近询问了为什么一段代码在剃须刀语法方面不起作用,现在我又用相同的代码提出了新问题:

        @if(Request.LogonUserIdentity.IsAuthenticated){
            <ul id="menu">
                <li>@Html.ActionLink("Location", "Index", "Location")</li>
                <li>@Html.ActionLink("Service", "Index", "Service")</li>
                <li>@Html.ActionLink("Service Assignment", "Index", "ServiceAssignment")</li>
                <li>@Html.ActionLink("Content Management", "Index", "Content")</li>
            </ul>                
        }else{
           <ul id="menu">
                <li>@Html.ActionLink("Location", "Index", "Location")</li>
                <li>@Html.ActionLink("Map", "Map", "Home")</li>
                <li>@Html.ActionLink("Help", "Help", "Home")</li>
            </ul>
        }

这次我的问题是:

为什么如果我登录退出,我只能看到菜单,而你应该只看到你是否登录?

也就是说,无论我是否登录,我都会看到经过身份验证的用户菜单。我需要在控制器中更新什么吗?

4

1 回答 1

1

根据MSDNRequest.LogonUserIdentity.IsAuthenticated

获取当前用户的 WindowsIdentity 类型。

您很可能正在使用 FormsAuthentication 并希望使用 ( MSDN ) Request.IsAuthenticated

获取一个值,该值指示请求是否已通过身份验证。

编辑

我查看了我们用来执行此逻辑的代码,我们使用HttpContext.User.Identity.IsAuthenticated( MSDN ) 方法来执行这种类型的分支,而不是 Request 属性。也许这就是你的问题所在。

@if(HttpContext.Current.User.Identity.IsAuthenticated){...}
于 2013-04-11T16:08:38.567 回答