我有这个代码
[HttpPost]
public ActionResult Index(LoginModel loginModel)
{
if (ModelState.IsValid)
{
// some lines of code . bla bla bla
TempData["loginModel"] = loginModel;
return RedirectToAction("index", "premium");
}
...
}
这个 Controller 在这里
public ActionResult Index()
{
var loginModel = TempData["loginModel"] as LoginModel;
...
}
现在,当页面加载时,一切似乎都可以正常工作。但是当我刷新时,一切都搞砸了,它说loginModel就像null。问题是,我该如何跟踪当前的登录用户。我启用了表单身份验证。 n
错误如下
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
Line 22:
Line 23: var loginModel = TempData["loginModel"] as LoginModel;
Line 24: string username = loginModel.username;
Line 25: string password = loginModel.password;
Line 26: premiumModel.username = username;
最佳答案
混乱
回答
这是由于您已经读取了TempData
密钥,并且一旦读取了该密钥,数据将丢失。
var Value = TempData["keyName"] //Once read, data will be lost
问题
回答
因此,即使在读取数据后仍要保留数据,您可以像下面这样激活它
var Value = TempData["keyName"];
TempData.Keep(); //Data will not be lost for all Keys
TempData.Keep("keyName"); //Data will not be lost for this Key
TempData
也可以在新选项卡/ Windows中使用,就像Session
变量一样。您也可以使用
Session
变量,唯一的主要问题是Session
变量与TempData
相比非常繁重。最后,您还可以跨 Controller /区域保留数据。希望这篇文章对您有很大帮助。
关于asp.net-mvc - asp.net mvc使对象保持事件状态,信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7592845/