正在删除视图中的会话变量

本文关键字:会话 变量 视图 删除 | 更新日期: 2023-09-27 18:21:53

如果在下面添加@{ 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>
        }

正在删除视图中的会话变量

会话状态是指在请求、浏览器选项卡之间,甚至在浏览器窗口关闭后保持不变。

你可能正在寻找的是TempData,它的设计完全符合你的意愿。

TempData的值将持续,直到它被读取或直到会话超时。以这种方式持久化TempData可以实现以下场景重定向,因为TempData中的值在单个请求。

这对消息和警报非常有效,因为您可以重定向到另一个页面(比如无效访问原因),并且在加载下一个页面之前仍然保留此消息。