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

前端之家收集整理的这篇文章主要介绍了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参数,并选择相应地显示错误消息.

猜你在找的asp.Net相关文章