我是asp.net中的新手,目前我正在使用Login功能在MVC4中进行网页应用。 我的索引操作方法如下所示 -
public ActionResult Index()
{
var PageModelList1 = new DataAccessLayer.DataAccess().GetPageInfo();
ViewData["MenuList"] = PageModelList1.PageModelList;
return View();
}
我的LogIn操作方法看起来像 -
[HttpPost]
public ActionResult LogIn(LogInModel model, string returnUrl)
{
if (ModelState.IsValid)
{
var PageModelList1 = new DataAccessLayer.DataAccess().GetPageInfo(model.UserName,model.Password);
ViewData["MenuList"] = PageModelList1.PageModelList;
return RedirectToAction("Index", "MyController");
}
ModelState.AddModelError("", "login failed");
return PartialView("_LogIn", model);
}
我需要的是,当我成功登录时,应该进行RedirectToAction("索引"," Deimos"),但菜单列表'应该有新的菜单列表'来自LogIn动作方法。我怎么能这样做?
答案 0 :(得分:0)
new ArrayList<Apple>()
将向浏览器发送302响应,其中新的url作为位置标头值,浏览器将发出一个全新的请求转到该页面。这个新请求不知道你在之前的请求中做了什么。所以RedirectToAction
将不起作用。您可以考虑使用ViewData
。
但TempData的生命只有在下一个请求之前。之后就消失了。因此,如果您想要所有后续请求(例如向用户显示菜单),我建议您在每次加载页面时从数据库表中读取它。您可以在第一次读取后将项目存储到缓存中,以避免在您担心的情况下对数据库进行持续命中。
另一种选择是将菜单项设置为Session变量并从那里读取。我不是那种将会话设置为会话的忠实粉丝。我更喜欢从缓存中读取它(其中数据是从db调用中加载的)。