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 回答