剃刀视图IsAuthenticated未按预期工作

13

我创建了一个简单的MVC应用程序,它使用了新项目提供的.Net Membership Provider。

我试图正确显示选项卡。可能我理解有误,但这是我的代码:

<!DOCTYPE html>
<html>
<head>
    <title>@ViewBag.Title</title>
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
</head>
<body>
    <div class="page">
        <div id="header">
            <div id="title">
                <h1>Suburban Customer Portal</h1>
            </div>
            <div id="logindisplay">
                @Html.Partial("_LogOnPartial")
            </div>
            <div id="menucontainer">
              <ul id="menu">

                @if (Request.IsAuthenticated)
                {
                  <li>@Html.ActionLink("ChangePassword", "ChangePassword", "Account")</li>
                }else { 
                  <li>@Html.ActionLink("Logon", "Logon", "Account")</li>
                  <li>@Html.ActionLink("Register", "Register", "Account")</li>
                }

                  <li>@Html.ActionLink("ContactUs", "ContactUs", "Home")</li>
              </ul>
            </div>
        </div>
        <div id="main">
            @RenderBody()
        </div>
        <div id="footer">
        </div>
    </div>
</body>
</html>

在这一行:

@if (Request.IsAuthenticated)

我试图根据用户是否已经认证来显示正确的选项卡,但这总是返回true...

我应该如何做?显然我没有以正确的方式处理它...

再次感谢!

2个回答

21

我认为你应该使用

@if(User.Identity.IsAuthenticated)


2
有趣的是... Request.IsAuthenticated 应该始终等于 User.Identity.IsAuthenticated。请参见这里:http://forums.asp.net/t/1416811.aspx - Leniel Maccaferri
@LenielMacaferi - 这是一个问题,如果你比相信我更相信aghausman12的话;-) - Jakub Konecki
我知道的是它能够在你给我的那个上运行,但不能在我用的那个上运行 :-D - ErocM
@JakubKonecki 我也信任你!;-) - Leniel Maccaferri

2

你的问题不是很清楚,但是在这行代码中,Request.IsAuthenticated

@if(Request.IsAuthenticated)

检查请求是否包含关于已认证用户的数据。如果为真,则会显示您的链接。

在您的特定情况下,只有当用户已登录时才会显示“更改密码”链接。

看起来是正确的。

要隐藏选项卡,即Request.IsAuthenticated = false,您必须首先注销,以清除存储登录信息的cookie从用户浏览器中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接