【问题标题】:How to redirect to a controller action from a JSONResult method in ASP.NET MVC?如何从 ASP.NET MVC 中的 JSONResult 方法重定向到控制器操作?
【发布时间】:2010-05-19 11:20:19
【问题描述】:

我正在根据用户的 UserId 作为 JsonResult 获取记录...

public JsonResult GetClients(int currentPage, int pageSize)
{
   if (Session["UserId"] != "")
   {
      var clients = clirep.FindAllClients().AsQueryable();
      var count = clients.Count();
      var results = new PagedList<ClientBO>(clients, currentPage - 1, pageSize);
      var genericResult = new { Count = count, Results = results };
      return Json(genericResult);
   }
   else
   {
         //return RedirectToAction("Index","Home");
   }
}

如何从 asp.net mvc 中的 JsonResult 方法重定向到控制器操作?任何建议...

编辑: 这似乎不起作用...

if (Session["UserId"] != "")
            {
                var clients = clirep.FindAllClients().AsQueryable();
                var count = clients.Count();
                var results = new PagedList<ClientBO>(clients, currentPage - 1, pageSize);
                var genericResult = new { Count = count, Results = results ,isRedirect=false};
                return Json(genericResult);
            }
            else
            {
                return Json({redirectUrl = Url.Action("Index", "Home"), isRedirect = true });
            }

【问题讨论】:

    标签: asp.net-mvc redirecttoaction jsonresult


    【解决方案1】:

    这将取决于您如何调用此控制器操作。当您使用 JSON 时,我想您是在 AJAX 中调用它。如果是这种情况,您无法从控制器操作重定向。您需要在 AJAX 脚本的 success 回调中执行此操作。实现它的一种方法如下:

    return Json(new 
    { 
        redirectUrl = Url.Action("Index", "Home"), 
        isRedirect = true 
    });
    

    在成功回调中:

    success: function(json) {
        if (json.isRedirect) {
            window.location.href = json.redirectUrl;
        }
    }
    

    备注:确保在 JSON 中包含 isRedirect = false,以防您不想重定向,这是控制器操作中的第一种情况。

    【讨论】:

    • 我一直使用 AJAX 重定向,但是在使用发布的表单字段集合时,而不是在使用 JSON 时。事实上,我现在正试图追踪一个涉及使用 JSON 发布的数据重定向的错误:stackoverflow.com/questions/4110889/… 听起来这不是我能做的事情,是吗?
    • 嗨,达林,感谢您的回复,已经对此进行了投票。我的消息可能过了太久,但想知道有什么方法可以在成功的情况下,重定向应该由 MVC 控制器而不是 UI 来处理。
    【解决方案2】:

    添加到 Darin Dimitrov 的回答中。对于 C#.NET MVC - 如果您想重定向到不同的页面/控制器并希望将对象/模型发送到新控制器,您可以这样做。

    在 JsonResult 方法中(在控制器中):

     ErrorModel e = new ErrorModel();
                e.ErrorTitle = "Error";
                e.ErrorHeading = "Oops ! Something went wrong.";
                e.ErrorMessage = "Unable to open Something";
    
    
    
    return Json(new 
    { 
        redirectUrl = Url.Action("Index", "Home",e), 
        isRedirect = true 
    });
    

    在成功回调中:

    success: function(json) {
        if (json.isRedirect) {
            window.location.href = json.redirectUrl;
        }
    }
    

    如果新控制器可以接受如下模型/对象..您可以将对象传递给新控制器/页面

        public ActionResult Index(ErrorModel e)
        {
            return View(e);
        }
    

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      你怎么想尝试打电话:

      return (new YourOtherController()).JSONResultAction();
      

      而不是使用重定向?

      【讨论】:

        【解决方案4】:

        如果您使用区域...

        控制器:

        return Json(new
                {
                    redirectUrl = Url.Action("Index", "/DisparadorProgSaude/", new { area = "AreaComum" }),
                    isRedirect = true
                });
        

        查看:

        success: function (json) {
        
                                   if (json.isRedirect) {
                                   window.location.href = json.redirectUrl;
                                   }
                                },
        

        【讨论】:

          【解决方案5】:

          没办法,客户端正在执行 AJAX 脚本,因此无法处理其他任何事情。

          我建议你根据回调函数中返回的数据在客户端脚本中重定向。

          在这里查看一个类似的问题:http://bytes.com/topic/javascript/answers/533023-ajax-redirect

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-02-13
            • 1970-01-01
            • 2016-02-06
            • 2013-06-20
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多