使用JsonResult重定向到操作

ViV*_*iVi 4 c# asp.net-mvc

我有一个观点.当用户点击我视图中的按钮时,我试图从我的视图中获取一些数据,而不通过AJAX POST重新加载我的视图来显示一些数据.

这是我的控制器中的方法:

[HttpPost]
public JsonResult GetUserTraj()
{
    var userTrajList =
        DBManager.Instance.GetUserTraj(Session["UserName"].ToString());
    return Json(userTrajList);
}
Run Code Online (Sandbox Code Playgroud)

这将返回Json结果.我正在尝试实现会话.因此,如果会话已过期,我希望将用户重定向到"登录"视图.在上述情况下,如果会话过期Session["UserName"]变为null并引发异常.

[HttpPost]
public JsonResult GetUserTraj()
{
    if (Session["UserName"] != null)
    {
        var userTrajList =
            DBManager.Instance.GetUserTraj(Session["UserName"].ToString());
        return Json(userTrajList);
    }
    else
    {
        RedirectToAction("Login", "Login");
        return Json(null);
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试了上面的代码.但它不起作用.它不会将用户重定向到"登录"视图.我试过了return RedirectToAction("Login", "Login");.但这不起作用,因为控制器动作方法不能返回其他内容JsonResult.请帮我找到相同的解决方案.

Rwi*_*ing 5

如果您使用AJAX请求页面,则无法在浏览器中重定向.您应该响应状态代码,然后使用javascript在前面重定向,就像这样

[HttpPost]
public JsonResult GetUserTraj()
{
    if (Session["UserName"] != null)
    {
        var userTrajList =
            DBManager.Instance.GetUserTraj(Session["UserName"].ToString());
        return Json(userTrajList);
    }
    else
    {
        //RedirectToAction("Login", "Login");
        return Json(new {code=1});
    }
}
Run Code Online (Sandbox Code Playgroud)

你需要写这个条件在你的Ajax成功调用里面重新加载登录界面,

if(result.code ===1){
    window.location = 'yourloginpage.html'
}
Run Code Online (Sandbox Code Playgroud)