0

2つのアクション関数を持つ1つのコントローラークラスがあります。1つのアクションは、1つのビューを持つログインページであり、もう1つのアクションは、複数のビューを持つバックエンドページです。

public ActionResult Login(...)
{
    if (logged in or login success)
    {
        return RedirectToAction("Backend","Controller");
    }
    ...
    return View();
}

public ActionResult Backend(...)
{
    if(session expired or not logged in)
    {
        return RedirectToAction("Login","Controller");
    }
    ...
    return View("someView");
}

問題は、バックエンドアクションがユーザーをログインアクションに送信する必要があり、ログインページに「セッションの有効期限が切れました」などのメッセージをユーザーに表示したい場合です。

例として、ViewBagは現在のセッションにのみ存在します。しかし、セッション間で情報を保存するための同様の簡単な方法はありますか?したがって、バックエンドにメッセージを設定してから、ログインにリダイレクトし、ログインにそのメッセージを読み取らせてビューに表示させることができますか?PersistentViewBagのようなものです。

実行可能なオプションであるように、私は実際にはget、post、またはcookieを使用したくありませんが、代わりにバックエンドアクションで独自のビューとしてログインするだけです。

4

1 に答える 1

2

ログインページにリダイレクトするときに、クエリ文字列を使用してデータを渡すことができます。

public ActionResult Backend(...)
{
    if(session expired or not logged in)
    {
        return RedirectToAction("Login","Controller",new { IsSessionExpired = true });
    }
    ...
    return View("someView");
}

ログインアクションでは、クエリ文字列を確認して、メッセージを表示するかどうかを決定できます。

アップデート

クエリ文字列を使用したくない場合は、TempDataを使用することもできます。

public ActionResult Backend(...)
{
    if(session expired or not logged in)
    {
        TempData["IsSessionExpired"] = true;
        return RedirectToAction("Login","Controller");
    }
    ...
    return View("someView");
}

次に、ログインアクションで確認できます。

if(TempData["IsSessionExpired"] != null)
{
    //Show message
}
于 2013-02-18T20:21:24.213 に答える