2011-04-11 17 views
3

我有一個搜索視圖,它使用AJAX向服務器發送請求。根據存儲庫返回的響應對象,應該在搜索視圖(發送請求的視圖)上顯示對話框(使用Json對象填充數據),或者應該將用戶重定向到結果視圖(已填充來自響應的數據作爲視圖模型傳遞)。ASP.NET MVC3:如何使用AJAX創建文章時重定向到視圖?

現在我被告知(並且經驗豐富),當使用AJAX創建文章時,無法重定向。那麼是否有一些方法可以重定向到另一個視圖並傳遞視圖模型(如果該響應是從存儲庫獲取的),並且僅在顯示對話框結果時才發回Json對象。

即得到由搜索視圖貼到我的控制器動作看起來目前有些事情是這樣的:

[HttpPost] 
    public ActionResult SomeAction(SearchRequest reqData) 
    { 
     ResponseBase response = worker.PerformSearch(reqData); 

     if (response is ViewResponse) 
     { 
      //Redirect to "AnotherView" and pass response as the view model. 
      return View("AnotherView", response as ViewResponse); 
     } 
     else if (response is DialogResponse) 
     { 
      //Return the Json object. 
      return Json(new { type = "dialogresponse", data = response }); 
     } 
     else 
     { 
      //To do: Put error handling code here. 
      throw new NotImplementedException(); 
     } 
    } 

回答

0

我建議你把它分成兩個呼叫。在第一個AJAX調用中,檢查它是一個ViewResponse還是一個DialogResponse。如果ViewResponse使另一個AJAX調用獲得實際的結果對象,則另請創建一個非AJAX服務器調用以重定向到新視圖。

2

這個問題有點老,但我想我會提供我的意見。 我有一個類似的情況,我不得不發表帖子,並在頁面上使用更新內容填充某個html,或將用戶重定向到新的位置。 但是,可能有更好的方法來完成這個,這就是我所做的。 如果您使用jQuery來執行該帖子,那麼查看響應的內容類型足夠智能;返回一個視圖就像現在一樣,並在成功函數中填充內容。如果您希望將用戶重定向

 string javascript = "window.location.href='{0}';"; 
     return JavaScript(string.Format(javascript, returnUrl)); 

MVC框架將javascript的MIME類型附加到響應,jQuery將挑選並執行JavaScript,並重定向用戶。 唯一的解決方案是將javascript填充到您的成功方法中的html內容中。爲了克服這個查詢html的內容類型,類似於here

相關問題