我已经创建了名为apicontroller的普通ASP MVC控制器以返回json
结果。在其中一种动作方法中,我想返回JSON,然后重定向到另一种动作方法。
将JSON返回API请求后,我必须使用SignalR
我尝试使用Action filter
,但它没有重定向到其他动作方法。
操作方法1
[NotifyUserActionFilter]
public ActionResult NotifyUser(int ID)
{
return Json("true",JsonRequestBehavior.AllowGet);
}
操作方法2
//the returning view has signalR javascript in it
public ActionResult ThankYou()
{
string Tempval = TempData["tempID"].ToString();
return View();
}
操作过滤器
public class NotifyUserActionFilter : System.Web.Mvc.ActionFilterAttribute
{
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
var ID = filterContext.HttpContext.Request.Params["ID"];
filterContext.Controller.TempData.Add("tempID", ID);
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "controller", "Api" },
{ "action", "Thankyou" }
});
}
}
假设您需要" notifyuser"的结果,并且在视图上消耗它,我将使用jQuery ajax呼叫处理您的问题。
简单地将您的" notifyuser"方法称为ajax。在Ajax调用的"成功"中,我将测试以查看JSON结果是否为" True"。如果是的话,我将重定向到新视图。设置" Window.Location ....."
如果您不使用JSON结果,则可以在" notifyuser"方法中重定向。