1

如果用户通过身份验证,我想将他带到“主页”页面,但使用包含用户配置文件的模型,否则,我想回发包含模型错误的同一页面。这是我所做的:

[HttpPost]
        [AllowAnonymous]
        public ActionResult Index(Login loginViewModel)
        {
            if (ModelState.IsValid)
            {
                IUserProfile userProfile = ValidateUser(loginViewModel);

                if (userProfile != null)
                {
                    FormsAuthentication.RedirectFromLoginPage(loginViewModel.UserName, loginViewModel.RememberMe);
                    // return View(userProfile); This obviously won't work
                }
                else
                {
                    ModelState.AddModelError("InvalidCredentials", "Invalid password. Please try again.");
                }
            }

            return View();
        }

问题是,我如何将视图模型(IUserProfile)传递给Home/Index.cshtml视图,因为我没有明确地将他重定向到主页;它是通过FormsAuthentication.RedirectFromLoginPage方法完成的。

我也不能在调用View(userProfileViewModel)后调用返回,FormsAuthentication.RedirectFromLoginPage因为如果这样做,按照惯例,它将尝试使用控制器Index上的名称创建视图,并尝试将视图模型传递给它,这是错误的,将导致一个例外。LoginUserProfile

4

3 回答 3

1

您需要在 Home 控制器的 Index 操作中传递模型。

实际上,RedirectFromLoginPage 只会向浏览器发送一个 HTTP 状态代码 (302),告诉它重定向到新页面,然后调用所需的操作。正是在此操作中(在您的主页中的索引)中,您必须传递您的视图模型。

于 2012-12-19T08:27:19.390 回答
0

首先,您的行动应该只做一件事和一件事……而不是两件事。您想使用索引作为登录和主页。为什么不将登录逻辑与主页逻辑分开?当您对用户进行身份验证时,此时会将他/她重定向到 Home/Index,如果登录失败,则再次显示登录。接下来,不是在登录身份验证期间加载用户配置文件,而是在将用户重定向到他们的主页时执行此操作(主页是我的逻辑)。到达页面后,加载他们的配置文件并通过会话或其他机制以某种方式缓存它。

除此之外,你为什么不使用FormsAuthetnication.SetAuthCookie(username, rememberMe)代替FormsAuthentication.RedirectFromLoginPage. 创建 cookie 后调用return RedirectToAction("Index", "Home"). 在此操作中,您可以使用HttpContext.Current.User.Identity.Name读取用户名并将其传递给您的方法以加载配置文件。

于 2012-12-21T09:54:36.890 回答
-1

尝试这个

if (Session["SessionName"].ToString() != "Role") { return RedirectToAction("UnAuthorised", "Login"); }

在您的索引页面中使用此代码

于 2012-12-19T08:55:41.517 回答