2013-08-20 35 views
3

所以,我有一个小问题,我想知道是否有任何可能性解决以下方式,我知道还有其他方法可以解决这个问题但我想知道是否可以像这样解决它:重定向从控制器后的Ajax调用(包括参数)

我有一个ajax调用,GET。在这个Ajax调用,我只想传递一些基于用户输入的参数(通过javascript),并让控制器动作处理剩下的部分。问题是,使用ajax,成功函数会处理完成后发生的任何事情。

我对我的动作有一个重定向(ActionResult,它返回一个带有一些参数的View),我想让控制器在这里重定向我,但是ajax使用Success函数。

如何将完整路径(可以更改,因为它基于用户输入)传递给成功函数以重定向?

谢谢!

public string Edit(string stringEventID) 
    { 
     Guid eventID = new Guid(stringEventID); 

     if (eventID == Guid.Empty || eventID == null) 
     { 
      return Url.Action("Edit", "MyController", new { area = "MyArea", id = new Event() }); 
     } 

     else 
     { 
      Event _event = _iEMARepository.Events.Where(p => p.EventID == eventID).SingleOrDefault(); 

      return Url.Action("Edit", "MyController", new { area = "MyArea", id = _event }) 
     } 
    } 
+0

我的问题不是该请求是否成功不,我希望控制器重定向,无论如何。但url不会一样,这取决于用户的输入。我怎样才能返回完整的路径,并在那之后通过window.location.href重定向 – Jose

回答

4

使用Url助手为MVC和您的路由正确构建URL。然后用URL返回Jsonresult(您可能需要设置AllowGet):

string url = Url.Action(your arguments here); 

return new JsonResult() 
{ 
    JsonRequestBehavior = JsonRequestBehavior.AllowGet, 
    Data = new Dictionary<string,string>() { { "url", url } } 
}; 

不是使用URL中成功的功能来触发重定向:

success: function (data) { 
    window.location.href = JSON.parse(data)['url']; 
} 
+0

返回一个字符串肯定会诀窍。我只是想知道javascript如何处理URL,因为我知道它与MVC处理它们的方式不同。 – Jose

+0

我只是想知道在这种情况下是否可以“跳过”成功函数,或者根本就不用ajax(我相信这最后一个不会工作,因为我基于用户输入的重定向,因此需要发送参数给控制器)​​ – Jose

+1

正确,你一定要调用服务器来构造URL。您将希望实际使用成功功能,因为如果服务器出现错误或ajax调用出现问题,您可能不希望重定向。 – asymptoticFault