保留ViewData MVC 4的值

时间:2014-05-15 10:08:33

标签: asp.net-mvc-4 viewdata

我正在研究MVC 4,其中我有“ActionResult”方法,登录页面,用户名和密码都是在文本框中输入的,根据用户名(这是billnumber)登录后应该提取相应的账单数据(用户名),所以目前一切正常,我可以从一个视图中获取用户名并将其发送给另一个进行进一步验证,我在Viewdata中存储了“username”和“usertypeID”,并将该值传递给下一个视图,但ViewData上的数据不会持续更长时间,即使我们尝试多次刷新页面(10到20次),下面是我用来存储和访问的代码

这是我存储值

的地方
   public ActionResult ValidateLogIn(FormCollection postedFormData)
    {
        // codes
  TempData["UsrName"] = LoginViewModel.LoginDataModel.UserName;
            // codes

 }


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

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

             PatientUnderDoctorDetailsViewModel = PatientUnderDoctorDataAccessService.PatientUnderDocLogInEnquiry(PatID);
   }

这是我将其存储在viewdata

的地方
        ViewData["message"] = TempData["UsrName"].ToString();
        ViewData["person"] =Convert.ToInt32(TempData["UserTypeID"]);
        TempData.Keep();

以及我在哪里从VIEWDATA获取价值

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

我将PatID和PersonType作为参数传递给下一个方法

一开始我没有使用TempData.keep();所以当我刷新页面至少用于获取错误时,尝试搜索并找到TempData,但我相信它在更长时间内效率不高,如果我将应用程序空闲5分钟然后刷新页面一次,它会生成错误消息,因为tempdata为空(null)

我需要什么

让我知道我有没有做过任何错误,或者有没有更好的方法来解决这个问题,在我退出应用程序之前,数据可以存储在变量中

enter image description here

2 个答案:

答案 0 :(得分:0)

我希望此链接可以帮助您State Management In MVC

答案 1 :(得分:0)

不要使用临时数据。当应用程序池刷新或使用其他进程(Web园)时,它将丢失。

User.Identity.Name将返回经过验证的用户的名称。

如果要传递数据,则应使用Models而不是ViewData或TempData或ViewBag。