加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 18:58:06 所属栏目:asp.Net 来源:网络整理
导读:我有一个HomeController与索引操作显示Index.aspx视图.它有一个用户名/密码登录部分.当用户单击提交按钮时,它会发送到AccountController中的登录操作. % Html.BeginForm("Login","Account",FormMethod.Post); % 在该操作中,它测试用户名/密码有效性,如果无效
我有一个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参数,并选择相应地显示错误消息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读