【发布时间】:2016-11-22 05:20:15
【问题描述】:
我有意见。当用户单击我视图中的按钮时,我试图从我的视图中获取一些数据,而无需通过 AJAX POST 重新加载我的视图以显示一些数据。
这是我控制器中的方法:
[HttpPost]
public JsonResult GetUserTraj()
{
var userTrajList =
DBManager.Instance.GetUserTraj(Session["UserName"].ToString());
return Json(userTrajList);
}
这会返回一个 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);
}
}
我尝试了上面的代码。但它不起作用。它不会将用户重定向到登录视图。我试过return RedirectToAction("Login", "Login");。但这不起作用,因为控制器操作方法不能返回 JsonResult 以外的东西。请帮我找到相同的解决方案。
【问题讨论】:
-
将返回类型更改为
ActionResult- 但请确保您的方法的用户正确处理重定向结果。 -
如果您的操作的返回类型是 JsonResult,您不能重定向到操作。将其更改为 ActionResult 并在其他部分只写 return RedirectToAction("LogIn","LogIn");
-
实际上我需要
JsonResult而不是ActionResult在正常情况下。如果会话过期,我需要ActionResult。 @Rob & @JaiminDave -
是的。它工作正常。如有必要,只需在返回 json 中添加 JsonRequestBehavior.AllowGet 属性。如果一个动作返回不同类型的结果,你应该使用 ActionResult。
-
@ViVi。我想说的是,如果一个动作返回不同类型的结果,你应该使用 ActionResult。如果您使用 AJAX,您显然无法重定向到其他页面。只有得到回应后才能这样做。
标签: c# asp.net-mvc