私はUserControl.ascx
を持っています。私のウェブサイトのすべてのページの上部に、現在ログインしているユーザの名前とEメールを(セッション変数に記録して)出力します。前記コントロールは現在Site.Master
によって呼び出され、<%Html.RenderPartial("UserControl")%>
を使用している。MVCでユーザコントロールを動的にロード
私が初めてログインすると、私の詳細が正しく表示されますが、私はログアウト時と奇妙な問題が発生し、再び何かをログインしようとすると、それは正常に動作します...
コントロール自体は、条件をテストSession("auth")
私のコントローラは、ユーザ認証時にtrue
に設定され、ログアウトボタンが押されたときには強制的にfalse
になります。ログアウトすると、すべてのセッション変数がクリアされます。
Request.IsAuthenticated
ではなく
Session("auth")
をチェックするために使用。同じ問題がarised。)
の問題は、私は別のユーザーとしてログインしようとすると、新しいユーザーの情報をヘッダーに表示するのではなく、名前:および電子メール:の横に何も表示されません(下記のコードを参照)。 UserControl.ascx
が状態を更新していないためです。
理想的には、ページが読み込まれるたびにUserControlにセッション変数を強制的にチェックさせるソリューションが必要です。これを達成するためのきれいな方法はありますか?ここで
<%@ Control Language="VB" AutoEventWireup = "false" Inherits="System.Web.Mvc.ViewUserControl" %>
<%-- The following line works around an ASP.NET compiler warning --%>
<%: ""%>
<%
If Session("auth") Then
%>
Name: <b><%: System.Web.HttpContext.Current.Session("user")%></b>
[ <%: Html.ActionLink("Log Off", "LogOff", "Account")%> ]<br />
Email: <b><%: System.Web.HttpContext.Current.Session("email") %></b>
<%
Else
%>
Name: <b>Not logged in</b>
[ <%: Html.ActionLink("Log On", "LogOn", "Account")%> ]<br />
Email: <b>Not logged in</b>
<%
End If
%>
は、ログインページでフォーム送信を扱う私のコントローラからのコードです:
<HttpPost()> _
Public Function LogOn(ByVal model As LogOnModel, ByVal returnUrl As String) As ActionResult
If ModelState.IsValid Then
If MembershipService.ValidateUser(model.UserName, model.Password) Then
FormsService.SignIn(model.UserName)
If Not String.IsNullOrEmpty(returnUrl) Then
Return Redirect(returnUrl)
Else
Session("auth") = True
Session("user") = model.UserName
Session("email") = MembershipService.GetEmail(model.UserName, model.Password)
Return RedirectToAction("Index", "Home")
End If
Else
ModelState.AddModelError("", "Invalid username or password.")
End If
End If
' If we got this far, something failed, redisplay form
Return View(model)
End Function
ログイン時にセッション変数をリセットしている場合は、ユーザーコントロールで明示的にキャッシュするのでない限り、現在の状態にする必要があります。使用しているコードをUserコントロールに投稿できますか? –
このコントロールも参照するSite.Masterからセクションを投稿する必要がありますか?途中ですぐにお返事いただきありがとうございます! – Kevin
コントローラ内にログインしたとき(またはセッション変数を設定したとき)に、あなたが何をするかをチェックすることが重要だと思います。 – abx78