0

以下に追加すると、このコードから出力が得られないのはなぜですか@{ Session.Remove("errors"); }

            @if (Session["errors"] != null)
            {

                <div class="alert alert-danger">
                    <ul>
                        @{
                            String[] errors = (String[])Session["errors"];
                        }
                        @foreach (String error in errors)
                        {
                            <li>@error</li>
                        }
                    </ul>
                </div>
            }

            @if (Session["success"] != null)
            {
                <div class="alert alert-success">
                    @Session["success"]
                </div>
            }

コードは最初に評価されてから出力されますが、それでも意味がありません。私はそれで出力を取得しなければ@{ Session.Remove("errors"); }、それは非常に面倒です。

現在のリクエストのみ持続する FLASH メッセージを実行しようとしています。

更新しました:

        TempData["errors"] = new String[] { "You need to be logged in to access this page." };

意見:

        @if (TempData.ContainsKey("errors"))
        {

            <div class="alert alert-danger">
                <ul>
                    @{
                        String[] errors = (String[])TempData["errors"];
                    }
                    @foreach (String error in errors)
                    {
                        <li>@error</li>
                    }
                </ul>
            </div>
        }

        @if (TempData.ContainsKey("success"))
        {
            <div class="alert alert-success">
                @TempData["success"]
            </div>
        }
4

1 に答える 1

4

セッション状態は、リクエスト間、ブラウザ タブ間、およびブラウザ ウィンドウが閉じられた後でも保持されることを意図しています。

おそらくあなたが探しているのは、まさにあなたが望むように設計されたTempDataです。

TempData の値は、読み取られるか、セッションがタイムアウトするまで保持されます。このように TempData を永続化すると、リダイレクトなどのシナリオが可能になります。これは、TempData の値が単一の要求を超えて使用できるためです。

これは、別のページ (無効なアクセスの理由など) にリダイレクトし、次のページが読み込まれるまでこのメッセージを保持できるため、メッセージとアラートに対して非常にうまく機能します。

于 2015-11-12T21:30:39.233 に答える