3

役割に応じてログインしている人をリダイレクトしたい。以下のコードを使用すると、デバッグ時にロールが空になります-まだ完全にログインしていないためだと思いますか?私は間違ったイベントを利用している可能性がありますが、誰かが私を正しい方向に向けることができますか?

<asp:Login ID="LoginUser" OnLoggedIn="Login1_LoggedIn" runat="server"
    DestinationPageUrl="~/Login.aspx" EnableViewState="false" 
        RenderOuterTable="false">

<p>
<asp:Button ID="LoginButton" CssClass="submitButton" runat="server" Width="70"
    CommandName="Login" Text="Log In"
        ValidationGroup="LoginUserValidationGroup" />
</p>
</asp:login>

protected void Login1_LoggedIn(object sender, System.EventArgs e)
{
    // Overrides ReturnUrl page parameter
    //Response.Redirect(LoginUser.DestinationPageUrl);

    if (User.IsInRole("Member"))
        Response.Redirect("~/AskExpert/AskQuestion.aspx");
    else if (User.IsInRole("Expert"))
        Response.Redirect("~/Admin/Experts/ViewQuestions.aspx");
    else if (User.IsInRole("Admin"))
        Response.Redirect("~/Admin/AdminHome.aspx");
}
4

2 に答える 2

2

代わりにRoles.IsUserInRole()を使用できます。User.IsInRole認証Cookieから認証データを読み取りますが、そのイベントが発生した時点では、このデータはまだ設定されていないようです。

if (Roles.IsUserInRole("Member"))
    Response.Redirect("~/AskExpert/AskQuestion.aspx");
else if (Roles.IsUserInRole("Expert"))
    Response.Redirect("~/Admin/Experts/ViewQuestions.aspx");
else if (Roles.IsUserInRole("Admin"))
    Response.Redirect("~/Admin/AdminHome.aspx");

欠点Roles.IsUserInRoleは、データベースプロバイダーを使用している場合、ラウンドトリップが発生することです。

于 2012-12-22T15:23:36.467 に答える
0

私は通常、Server.Transferを使用して制御を転送し、リダイレクトの行き来を避けます。

于 2012-12-22T16:11:03.867 に答える