C# 从主页登录对话框并验证主页-ASP.Net MVC Razor

C# 从主页登录对话框并验证主页-ASP.Net MVC Razor,c#,asp.net,asp.net-mvc,asp.net-mvc-4,razor,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Razor,使用mvc/razor的asp.net相对较新。我有一个主页,它没有经过身份验证。现在我有一个按钮,它在一个对话框jqueryui中弹出一个局部视图,请求输入用户名密码并将int传递给AccountController。在进行身份验证之前一切都很好,现在我如何通知我的主页我们是否已通过身份验证?我正在尝试重定向方法,但不知道从那里走到哪里。我不想再次重新加载页面,所以我猜我应该避免重定向,有更好的方法吗 Home.cshtml dialog = $("#dialog-form").dialog(

使用mvc/razor的asp.net相对较新。我有一个主页,它没有经过身份验证。现在我有一个按钮,它在一个对话框jqueryui中弹出一个局部视图,请求输入用户名密码并将int传递给AccountController。在进行身份验证之前一切都很好,现在我如何通知我的主页我们是否已通过身份验证?我正在尝试重定向方法,但不知道从那里走到哪里。我不想再次重新加载页面,所以我猜我应该避免重定向,有更好的方法吗

Home.cshtml

dialog = $("#dialog-form").dialog({
            autoOpen: false,
            height: 260,
            width: 350,
            modal: true,
            buttons: {
                "Submit": function () {
                    $("#LogOnForm").submit();
                },
                Cancel: function () {
                    $(this).dialog("close");
                }
            }
        });
。 .

controller.cshtml

        [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public ActionResult Login(LoginModel model, string returnUrl)
        {
            if (ModelState.IsValid && MySqlWebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
            {
                return RedirectToLocal(returnUrl);
            }

            // If we got this far, something failed, redisplay form
            ModelState.AddModelError("", "The user name or password provided is incorrect.");
            return RedirectToAction("Index", "Home");
            //return View(model);
        }

您可以在主页上添加一个用户名标签,作为标识符。如果用户是匿名的,则标签将显示Hello anonymous user(匿名用户),如果用户获得身份验证,则可以简单地显示用户名和Hello关键字,通过访问标签,您可以识别用户是否经过身份验证

此外,我相信在认证后会生成一个令牌,该令牌也可以用于此目的,但如果您只需要通过主页显示进行显示或识别,则可以按照上述步骤进行操作

对于我的一个项目来说,这是我的目的

Hello, <asp:LoginName runat="server" /> !

在我看来,重定向在这里是一个不错的解决方案。我假设您的大多数控制器/操作都有Authorize属性,因此当用户成功登录时,应该将其重定向到所需页面

我还注意到,如果登录失败,您会将用户重定向到主页/索引-为什么不将用户留在同一登录页面上,并向其显示一条错误消息


另一个解决方案是通过ajax提交表单。然后,您应该修改您的登录操作,使其返回一个错误,例如401-登录失败时未经授权,200-如果登录成功,则为Ok,同时假设您正在使用身份验证cookie,则应将其传递到此处。然后,您必须监视ajax完成事件,并检查您得到的响应状态。如果您获得401,则在对话框窗口中显示一条错误消息;如果您获得200,则表示登录成功-如果您使用表单验证cookie,则将其存储以备将来使用,然后只需关闭对话框表单即可。从这一点上说,所有请求都将包含此身份验证cookie,因此所有请求都将通过授权。

Ajax似乎是一个很好的解决方案。因此,我从控制器返回200/401,并在家中使用ajax处理它。你能给我指一个链接,我可以在这里参考这方面的ajax代码吗。我对ajax还是新手。
        [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public ActionResult Login(LoginModel model, string returnUrl)
        {
            if (ModelState.IsValid && MySqlWebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
            {
                return RedirectToLocal(returnUrl);
            }

            // If we got this far, something failed, redisplay form
            ModelState.AddModelError("", "The user name or password provided is incorrect.");
            return RedirectToAction("Index", "Home");
            //return View(model);
        }
Hello, <asp:LoginName runat="server" /> !