2012-03-25 135 views
1

雖然我讀了幾十個答案,但我找不到解決方案。 我使用MVC 3與剃刀。我有一個簡單的表單,通過ajax進行客戶端驗證。這部分工作正常。我的問題是:在我的控制器更新行動我想重定向到另一個行動。如果用戶禁用了Javacript,這可以正常工作。但啓用javascript/ajax後,redirectaction似乎不起作用。相反,它看起來像是某種partialview或類似的東西被執行。Ajax submit重定向MVC 3

我的控制器/動作代碼:

Function UpdateItem(Item As CItem) As ActionResult 

    ' some validation code, save etc. 

    if everythingok then 
     Return RedirectToAction("Updatesuccess") 
    else 
     Return RedirectToAction("EditItem") 
    endif 

End Function 

我的HTML頁面看起來像(簡稱/僞):

Logo image 
H1 
some text 

<form>....</form> 

當窗體通過AJAX新的HTML代碼被添加超出提交「一些文本」,所以表格被替換,但替換表格上方的所有內容都保留在頁面上。 當ajax/javascript被禁用時,在提交完整的新頁面後加載。我檢查了http頭並注意到,用ajax沒有重定向(這在某種程度上是合乎邏輯的,因爲它是ajax)。 我能做什麼?我想重定向到一個新頁面。

是否可以禁用ajax-submit並僅使用「正常」表單提交? 我喜歡用戶輸入數據時通過ajax進行的客戶端驗證,我想使用它,但對我來說,如果提交是「正常」提交,那就足夠了。

我希望有人瞭解我想要什麼並能幫助我。

謝謝。

回答

3

我不是100%肯定我明白你的問題,但究竟發生了什麼,不要downvote我:)

的問題是,通過重定向發送作品的HttpResponse在頭部中指示重定向,這是瀏覽器理解的。如果你通過AJAX提交,它不是處理請求的瀏覽器,它是你的OWN JS代碼。

這裏有一個訣竅:不是返回一個重定向,而是返回Url(最好是json),然後使用window.location手動重定向。 我不精通VB,這裏就是我會做它在C#:

var url = new UrlHelper(this.ControllerContext.RequestContext); 
var link = url.Action("UpdateSuccess"); 
return Json(new {link}); 

,然後在jQuery的:

$.ajax({ method: 'POST', 
      url: 'your post url', 
      success: function(result) {window.location = result.link; }, 
      // ... (passing form etc) 
    }); 
+0

謝謝您的回答。因爲我沒有那麼強大,我花了一段時間才讓它運行,但沒關係。 – 2012-03-26 14:02:49