2014-01-10 24 views
2

當您返回Json(...)時,您特別告訴MVC不要使用視圖並提供序列化的JSON數據。您的瀏覽器會打開一個下載對話框,因爲它不知道如何處理這些數據。返回Json將在URL指定時重定向到另一個視圖

我得到了下面的鏈接

How to return Json object from MVC controller to view

上述信息時,我給這個下面的代碼中的某些操作引起

return Json(new { Url = "sep/employee"} 

是否會重定向到指定的操作?它如何重定向到URl?

爲什麼我不能使用return RedirectToAction(「sep/employee」)。

如何返回Json代碼重定向到在Url中指定的操作。

例如:

public ActionResult Index() 
{ 
................................ 

return Json(new { Url = "sep/employee"} 
} 

public ActionResult employee() 
{ 
.................... 
} 

什麼區別B/S redirectaction和返回JSON

+0

你的觀點是什麼樣子? – Ronald

回答

3

你下面的行返回到ajaxsuccess呼叫

return Json(new { Url = "sep/employee"});  

然後你需要指定重定向到新的頁面

success: function(result) { 
     window.location.href=result.Url; 
    } 
+0

return Json(new {Url =「sep/employee」} - >它會自動重定向到可以正常工作的員工操作。我問它是如何工作的和redirectaction – SivaRajini

+0

之間的區別是什麼你調用索引方法從ajax調用,請張貼成功電話爲該AJAX –

+0

不呼叫索引從ajax call.its初始頁面加載 – SivaRajini

1

RedirectToAction簡單地返回302代碼與網址,告訴那裏的瀏覽器應該重定向到你的瀏覽器。瀏覽器立即再次調用服務器到從重定向響應中獲得的URL。

RedirectToAction內部是:從傳遞給RedirectToAction

  • 返回新的參數

    1. 構建重定向URL RedirectToRouteResult
    2. RedirectToRouteResultExecuteResult你可以找到以下行:

      context.HttpContext .Response.Redirect(destinationUrl,endResponse:false);

    它只是用重定向URL返回302。更多信息 - 請看源代碼here

    返回JSON數據只是返回JSON序列化對象到您的瀏覽器。不打算做任何重定向。要消耗這樣的結果,你可能會調用使用$.ajax服務器:

    $.ajax({ 
        url: 'sep/employee', 
        type: 'POST' 
        success: function(result) { 
         // handle the result from the server, i.e. process returned JSON data 
        } 
    }); 
    

    ExecuteResultJsonResult只是通過序列化CLR對象響應流,其土地在您的瀏覽器後,響應被完全接收。然後你可以在JavaScript代碼中處理這樣的響應。

    編輯:

    當然,你可以通過返回的Json像

    return Json(new { Url = "redirectionUrl"} 
    

    ,並在客戶端模仿302重定向處理它像

    $.ajax({ 
        url: 'sep/employee', 
        type: 'POST' 
        success: function(result) { 
         // mimic the 302 redirection 
         windows.location.href = result.Url 
        } 
    }); 
    

    但恕我直言,應該避免因爲您重塑了MVC基礎架構並擴大了您的代碼庫。

  • +0

    no.it被重定向到指定的動作。我問它是如何工作的? redirectaction – SivaRajini

    +0

    回答編輯者有什麼區別?使用傳遞的參數(控制器名稱,操作名稱,路由數據...)將'action'轉換爲URL –

    1

    是否會重定向到指定的操作?它如何重定向到URl?

    我假設你的意思是要求「它會重定向到指定的動作嗎?它將如何重定向URI?」

    要回答你的問題:它如何重定向到URL?

    在您的示例中,如果您將HTTP請求作爲AJAX進行重定向,並且您將顯式處理生成的對的HTTP響應,實際上將重定向到您收到的URL。所以你的看法應該是這樣的:

    $.ajax({ 
        url: '{your controller}/index', 
        type: 'GET' 
        success: function(url) { 
        // write code to redirect to the URL 
        // example: 
        // window.navigate(url) 
        } 
    }); 
    

    如果你的觀點沒有任何東西,那麼它不會重定向。你沒有發佈你的觀點,所以我假設它只是一個正常的頁面加載。

    您的下一個問題,b/s重定向和返回Json有什麼不同?

    如果你真的只是想重定向,然後從你的控制器做RedirectToAction,這正是它的目的。您可以使用AJAX和JSON來實現相同的效果,以便能夠重定向,但AJAX和JSON的用途遠不止重定向,在大多數情況下(除非您有很好的理由),否則您可能不希望將RedirectToAction替換爲該方法。

    相關問題