2013-08-20 63 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