我有一个HomeController与索引操作显示Index.aspx视图.它有一个用户名/密码登录部分.当用户单击提交按钮时,它会发送到AccountController中的登录操作.
<% Html.BeginForm("Login","Account",FormMethod.Post); %>
在该操作中,它测试用户名/密码有效性,如果无效,则将用户发回到登录页面,并显示凭证不正确的消息.
[HttpPost] public ActionResult Login(LoginViewModel Model,string ReturnUrl) { User user = MembershipService.ValidateUser(Model.UserName,Model.Password); if (user != null) { //Detail removed here FormsService.SignIn(user.ToString(),Model.RememberMe); return Redirect(ReturnUrl); } else { ModelState.AddModelError("","The user name or password provided is incorrect."); } // If we got this far,something failed,redisplay form return RedirectToAction("Index","Home"); // <-- Here is the problem. ModelState is lost. }
但是这里的问题是:ValidationSummary总是空白的,因为我们在RedirectToAction中失去了Model.
所以问题是:如何在没有重定向的情况下将用户发送到不同控制器上的操作?
解决方法
正如其他人所说,如果验证失败,返回视图是常见的,但是您正在从您的帐户控制器调用,您将需要指定视图的完整路径
return View("~/Views/Home/Index.aspx",model);
要么
如果登录失败,还有一个单独的登录页面并重定向到该页面.两个页面都将提交相同的登录操作. Facebook以此为例.
要么
当您只想显示错误消息
return RedirectToAction("Index","Home",new { LoginAttempts = 1 });
然后在索引操作中读取LoginAttempts参数,并选择相应地显示错误消息.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。