asp.net-mvc – ASP.NET MVC – 如何从不同的控制器维护ModelState?

我有一个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参数,并选择相应地显示错误消息.

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....