gpt4 book ai didi

jquery - mvc 3、jquery ajax 和表单例份验证

转载 作者:行者123 更新时间:2023-12-03 22:50:34 25 4
gpt4 key购买 nike

在我的 MVC3 项目中,我有一个带有 [Authorize] 属性的 Controller 。我有一个没有 ajax 的表单提交,如果用户没有登录,它会将用户(按预期)重定向到登录屏幕。

但是,现在我有一个使用 jquery ajax 提交的表单,我该如何做同样的事情呢?如果用户未获得授权,则将用户重定向到登录屏幕?成功登录后,用户应该被重定向到初始操作。

Controller

[Authorize]
[ValidateInput(false)]
public JsonResult SubmitChatMessage(string message)
{
if (!string.IsNullOrEmpty(message))
{
// Do stuff
}

// Return all chat messages
return GetChatMessages();
}

客户端 JQUERY

$(document).ready(function () {
$("form[action$='SubmitChatMessage']").submit(function (event) {
$.ajax({
url: $(this).attr("action"),
type: "post",
dataType: "json",
data: $(this).serialize(),
success: function (response) {
// do stuff
}
});
return false;
});
});

我可以从 Firebug 控制台窗口看到服务器返回:

GET http://domain/Account/LogOn?ReturnUrl=%2fProductDetails%2fSubmitChatMessage

期待您的帮助!

更新了可能的解决方案

最佳答案

是的,这是我一直讨厌关于 ASP.NET 中的表单例份验证的事情之一 - 根本不支持 AJAX 身份验证。将处理 401 的 IIS 添加到其中,这可能会很痛苦。

有几种方法可以做到这一点,但没有一种方法特别“干净”。

其中包括:

  1. 在 Controller 中设置一个ViewBag标志,对应于Request.IsAuthenticated,然后如果未通过身份验证,则将提交按钮点击事件重写到登录页面。

  2. 让您的 AJAX 操作返回 JsonResult,它是“code”的属性。其中代码 0 表示成功,1 表示未验证,2 表示其他数据问题等。然后在 complete $.ajax 回调中检查该代码并重定向到登录页面。

  3. 检查 $.ajax jqXHR 响应对象的状态代码 403,然后重定向到登录页面。

  4. 为您的提交按钮编写一个自定义 HTML 帮助程序,它会呈现常规提交按钮或转到登录页面的 anchor 标记,具体取决于身份验证状态。

  5. 编写一个自定义授权属性,用于检查是否 Request.IsAjaxRequest(),并返回自定义 JSON 对象,而不是重定向到登录页面的默认行为(可以AJAX 请求不会发生)。

关于jquery - mvc 3、jquery ajax 和表单例份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6891204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com