从同一控制器中的另一个Action方法重定向到Action方法

时间:2016-07-19 12:25:05

标签: asp.net-mvc-4

我是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动作方法。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

new ArrayList<Apple>()将向浏览器发送302响应,其中新的url作为位置标头值,浏览器将发出一个全新的请求转到该页面。这个新请求不知道你在之前的请求中做了什么。所以RedirectToAction将不起作用。您可以考虑使用ViewData

但TempData的生命只有在下一个请求之前。之后就消失了。因此,如果您想要所有后续请求(例如向用户显示菜单),我建议您在每次加载页面时从数据库表中读取它。您可以在第一次读取后将项目存储到缓存中,以避免在您担心的情况下对数据库进行持续命中。

另一种选择是将菜单项设置为Session变量并从那里读取。我不是那种将会话设置为会话的忠实粉丝。我更喜欢从缓存中读取它(其中数据是从db调用中加载的)。