2012-01-18 38 views
1

在文件FirstView.cshtml我有一個事件 - 點擊一個表格的單元格將您重定向到一個方法:MVC返回錯誤的觀點

$.get('@Url.Action("MyMethod", "MyController")', { someParameters }); 

在該方法的MyMethod,這是無效的,我打電話事件DownloadString完成其中我有:

Response.Redirect(Url.Action("Second", "MyController")); 

其次是返回SecondView的操作方法。 SecondView是我期望的視圖,但它從不在瀏覽器上顯示。斷點進入它,傳遞它並在瀏覽器中獲得FirstView。

可能是什麼原因?它可能是因爲他們在同一個控制器中嗎?

方法是這樣的: Second return View。在它的正文中,我傳遞了一些ViewData參數。

事件: 我讀了一些JSON數據並調用重定向。

奇怪的是,斷點移動通過正確的視圖,但我在我的瀏覽器中得到了錯誤的。

+0

你可以顯示你的代碼的僞代碼嗎? – gdoron 2012-01-18 14:35:49

回答

0

Srcee,

我相信這是由於這樣的事實:你的Ajax功能「完成」一旦擊中的MyMethod行動。由於ajax調用,重定向不會被觸發,因爲它不是流水線的一部分(至少,這是我的基本理解)。你的一個替代方案是沿着以下行做一些事情:

$.ajax({ 
    url: '@Url.Action("MyMethod", "MyController")', 
    data: { id: 123 }, // i.e. someParameters 
    context: document.body, 
    success: function(){ 
    window.location = '@Url.Action("Second", "MyController")'; 
    } 
}); 

這頭的東西都頂部和可能不工作,而是一種替代方法。

- 基於你以後的編輯,我實際上建議你不要使用ajax,因爲根據我的評論不可能(通過下面的評論)通過ajax調用在服務器上重定向。見:

asp.net mvc ajax post - redirecttoaction not working

也:

How can I RedirectToAction within $.ajax callback?

確認這一點。

+0

但重定向被擊中,第二種方法被擊中。 – 2012-01-18 13:31:52

+0

我*認爲它仍然與它是ajax調用有關。我現在不在開發機器上,或者會嘗試,但給我的*嘗試*一個奔跑,看看會發生什麼。我今天晚些時候也會這樣做。 – 2012-01-18 13:34:49

+0

但是我不會從.cshtml中調用Second。我從控制器中調用它。我不能從Ajax調用它。 – 2012-01-18 13:36:57

0

不要在MyMethod中調用Response.Redirect(...)。相反,致電:

public ActionResult MyMethod() 
{ 
    return Redirect(Url.Action("Second")); 
} 

注意,如果控制器名稱是一樣的一個你,你並不需要明確包括它。

我只是在我的開發盒上做了一個測試,這個工程(假設我正確地模擬了你的問題)。

+0

我試過了,結果是一樣的,我得到第一個視圖。 – 2012-01-18 13:53:23

+0

@Srcee - 你可以在相關頁面上發佈更多的代碼嗎?我覺得我們看不到足夠的。根據你和jim的討論,我覺得我缺少一些東西。 – JasCav 2012-01-18 15:47:30