在MVC4中使用会话变量时,对象引用未设置为对象的实例

时间:2014-05-26 11:53:36

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

注意

这不是我要问的重复问题,我已经从堆栈中读取了3个不同的链接,如下所示,但没有一个显示我的问题(或)原因的解决方案,所以请让我知道我做错了什么

link1

link2

link 3

我开发了MVC应用程序,其中登录页面的用户名被带到控制器以获取数据,在那里它加载了该用户名的值,所以我希望该用户名存在直到我退出我的应用程序,所以我做的是做了一些R& D用什么来存储和保存数据并将其传递给另一个页面, 首先我使用" TempData "这适用于我的场景,它根据我的需要提取数据,但是当应用程序空闲5分钟时会发生错误然后,如果我按下刷新按钮或F5,我得到上述错误,用户名为空生成错误消息" 对象引用未设置为对象的实例"我知道为什么会出现这个错误。 后来我再次搜索它,使用会话变量来存储和发送它,即使它确实与tempdata一样工作但是在几分钟之后如5分钟以上,如果页面刷新生成相同的消息,我相信tempdata和session中使用的语法是正确,因为它工作正常,我发布我在MVC中使用它的方式的代码,请告诉我我做过的任何错误,或让我知道我该怎么做才能解决这个问题,这应该适用于更长的时间空闲,除非我使用会话时间退出应用程序。

注意

我没有使用任何会话时间,比如应用程序空闲5分钟就应该退出应用程序。

CODE

public ActionResult ValidateLogIn(FormCollection postedFormData)
    {
      LoginViewModel.LoginDataModel.UserName = Convert.ToString(postedFormData["UserName"]);
        LoginViewModel.LoginDataModel.Password = Convert.ToString(postedFormData["Password"]);

       // ViewBag.Message = LoginViewModel.LoginDataModel.UserName;

       // TempData["UsrName"] = LoginViewModel.LoginDataModel.UserName;
        TempData.Keep();
        Session["UsrName"] = LoginViewModel.LoginDataModel.UserName;

        // with some code..........
   }

 public ActionResult LandingPage()
    {
        //////ViewData["message"] = TempData["UsrName"].ToString();   
        Session["message"] = Session["UsrName"].ToString();
            ViewData["person"] = Convert.ToInt32(TempData["UserTypeID"]);
            TempData.Keep();

         String PatID = Convert.ToString(Session["message"].ToString());
            int PersonType = Convert.ToInt32(ViewData["person"]);

                PatientDetailsViewModel = PatientDetailsDataAccessService.LogInEnquiry(PatID);
                return View("../PatientDetails/PatientDetailsView", PatientDetailsViewModel.ServiceList.AsEnumerable());
        }

,这是刷新时产生的错误

enter image description here

1 个答案:

答案 0 :(得分:-1)

一旦用户登录以获取用户名,您就可以使用User.Identity.Name。这样你就不必乱用临时数据,viewbag或viewdata。