注意
这不是我要问的重复问题,我已经从堆栈中读取了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());
}
,这是刷新时产生的错误
答案 0 :(得分:-1)
一旦用户登录以获取用户名,您就可以使用User.Identity.Name。这样你就不必乱用临时数据,viewbag或viewdata。