我有这个代码

[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/

10-13 00:52