我有这个链接
@Ajax.ActionLink("comment", "CreateDebateComment", new { id = Model.DebateID}, new AjaxOptions
{
UpdateTargetId = "comment-entry-box",
InsertionMode = InsertionMode.Replace,
HttpMethod = "GET"
});
触发此控制器
[Authorize]
public PartialViewResult CreateDebateComment(int id)
{
DebateIDForComment = id;
return PartialView("_CreateDebateCommentPartial");
}
如果用户未登录,则会将其重定向到LogOn页面,但会在comment-entry-box div中加载,而不是重定向到Login Page
我也尝试了这种变化
public PartialViewResult CreateDebateComment(int id)
{
if (!User.Identity.IsAuthenticated)
{
RedirectToAction("LogOn", "Account");
}
DebateIDForComment = id;
return PartialView("_CreateDebateCommentPartial");
}
但它没有重定向,仍会加载partialView
有谁知道如何才能让我按照自己的意愿运作?我需要登录页面正常加载,而不是在评论条目框中加载。
答案 0 :(得分:1)
如果不使用[授权](我意识到这是问题)怎么办?
您在代码中检查授权(例如!User.Identity.IsAuthenticated
)并将您的响应包装在json中,客户端的false
重定向到登录[通过javascript]
True
后面是您要显示的数据
即
{ "Success": "false" }
或
{ "Success": "true", "data": "blah blah blah" }
答案 1 :(得分:1)
您可以查看一下following blog post,其中Phil Haack解释了如果请求是AJAX请求并返回401 HTTP状态代码,您可以如何禁止表单身份验证模块重定向到LogOn页面可以被客户拦截并相应地重定向。
所以要么添加他展示的HttpModule,要么将他的NuGet包安装到你的项目中,然后你所要做的就是注册一个全局的ajax事件,每当你在页面上的一些AJAX请求命中401时,它就会被触发服务器:
<script type="text/javascript">
$.ajaxSetup({
statusCode: {
401: function () {
window.location.href = '@Url.Action("logon", "account")';
}
}
});
</script>