在视图中删除会话变量

时间:2015-11-12 21:16:10

标签: c# asp.net asp.net-mvc razor asp.net-session

为什么我没有收到此代码的输出,如果我添加 @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"); }

代码是否首先得到评估然后输出,但即便如此也没有意义。没有 TempData["errors"] = new String[] { "You need to be logged in to access this page." }; 我得到它的输出没有什么是非常烦人的。

尝试仅针对当前请求执行FLASH消息。

更新:

        @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>
        }

查看:

Pat_ID
4
6
8
9
11
35
45
67
...

1 个答案:

答案 0 :(得分:3)

会话状态意味着在请求,浏览器选项卡之间保持持久性,甚至在浏览器窗口关闭后也是如此。

您可能正在寻找的是TempData,其设计目的完全符合您的意愿。

  

TempData的值会持续直到读取或直到会话为止   超时以这种方式保持TempData可以启用诸如的方案   重定向,因为TempData中的值超出了a   单一请求。

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