重定向到另一个页面后,Tempdata变为null

时间:2018-03-22 13:49:52

标签: asp.net-mvc tempdata

当用户成功登录时,我将用户名存储在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>

这实际上适用于第一次加载,但是如果我转到另一个页面,tempdata将变为null并且不显示用户名。如何在_layout上保留用户名?

Username displaying

Username not display

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:-1)

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>