【问题标题】:Tempdata becomes null after redirect to another page重定向到另一个页面后临时数据变为空
【发布时间】:2018-03-22 13:49:52
【问题描述】:

当用户成功登录后,我将用户名存储在 tempdata 中,以便在我的 _Layout 中使用它:

TempData["username"] = model.Email.Split('@')[0];
TempData.Keep("username");

在我的 _Layout 上:

<li class="nav-item">                   
     <h5 style="color:white"> Welcome, @TempData["username"]</h5>                  
</li>

这实际上在第一次加载时有效,但如果我转到另一个页面,临时数据将变为 null,并且没有显示用户名。如何在我的 _layout 上保留用户名?

Username displaying

Username not display

【问题讨论】:

    标签: asp.net-mvc tempdata


    【解决方案1】:

    Tempdata keep 方法仅适用于下一个请求。如果要在所有页面中存储数据。使用 MVC 身份主体方法来持久化整个页面的数据。校长

    【讨论】:

      【解决方案2】:

      如果您最近将身份验证更改为 azure Ad,并且您的应用程序已实现负载平衡。请确保您已更新负载均衡器以使用粘性会话。如果没有粘性会话,响应可能来自任何可能导致空临时数据的服务器。

      【讨论】:

        【解决方案3】:

        TempData 设计为仅在当前请求和下一个请求之间具有生命周期。您必须在每次请求时重新存储它(或致电 .Keep())以使其在后续请求中可用。

        您最好使用 Session 对象或从您的用户身份中检索它。

        但是,如果您在调用 .Keep() 之后调用它(显示调用计数),您可以“保留”您的 TempData 对象。

        <li class="nav-item">                   
             <h5 style="color:white"> Welcome, @TempData["username"]</h5>
             @TempData.Keep("username")
        </li>
        

        另一种规避方法是使用.Peek()

        <li class="nav-item">                   
             <h5 style="color:white"> Welcome, @TempData.Peek("username").ToString()</h5>
        </li>
        

        【讨论】:

        • 谢谢马尔科!也许我会使用会话
        猜你喜欢
        • 2016-09-07
        • 1970-01-01
        • 2020-04-12
        • 1970-01-01
        • 2017-06-08
        • 1970-01-01
        • 2017-11-02
        • 1970-01-01
        • 2017-03-04
        相关资源
        最近更新 更多