2015-10-14 67 views
0

MVC5爲什麼我對MVS POST函數的調用跳過RedirectToAction?

這裏的實際問題是,我的代碼工作,我不明白爲什麼,這表明我可能會使用一種不好的做法。所以我想就此提出意見。這是我已經爲我的應用程序創建的代碼:

Function Method() As ActionResult 
    Dim viewModel As New aViewModel 
// Code that sets up the View for a POST… 
    Return View(viewModel) 
End Function 

<HttpPost()>, <ActionNAme("Method") 
<ValidateAntiForgeryToken()> 
Function MethodDifferentName(<Bind(…)> ByVal parameter As Type1) 
// Code that confirms the POST is valid and saves data … 
    Return RedirectToAction("<some action after the POST>", "<some controller>") 
End Function 

(注:當我最初編碼方法,參數列表是相同的POST方法,所以我不得不重新命名POST方法我不」我真的需要這些,但我已經包含了現在正在工作的內容,所以人們正在響應代碼,因爲它是)

當我創建種子方法時,原來MethodDifferentName(...)正是我想做的種子數據庫。因此,不是重複,我認爲代碼是不好的做法,我簡稱爲現有的功能如下:

Dim instance As New ControllerWithTheMethod 
. 
. 
instance.MethodDifferentName(ParameterOfType1) 

和它的作品,但我不知道爲什麼。我在幾個月前編寫了這個代碼,並且不記得有過這樣的想法。但是當我逐步通過種子代碼時,我注意到執行過程通過MethodDifferentName,它跳過了RedirectToAction()。這引起了我的注意。

我不明白它爲什麼會跳過RedirectToAction()。誰能解釋一下?

+0

也許你需要添加作爲ActionResult第二種方法? –

+0

我相信你可能會給我答案,但第一我覺得我可能會誤會;我對工作方式沒有任何問題。我實際上並不希望'RedirectToAction'實際上在第二種方法上運行,我只是不明白爲什麼它不是。但我相信你指出在第二種方法中,它不是'ActionResult'函數,所以RedirectToAction不起作用。這是你的觀點嗎? – Alan

+0

那麼RedirectToAction不是一種會切換到另一個動作的方法。這是一個返回值,會導致發送到客戶端的http重定向代碼。 –

回答

1

事情是RedirectToAction實際上並沒有在任何地方重定向,它只是構造結果(你從函數返回時立即忽略)。

我懷疑你希望RedirectToAction來的工作方式類似於Request.Redirect(...)其重定向並終止請求,這不是在ASP.Net MVC的情況下處理 - 所有RedirectXXX傭工只返回RedirectResult仍然需要從動作返回渲染稍後作爲實際的重定向。

修復 - 從您的新操作返回MethodDifferentName的結果。

關於爲什麼MethodDifferentName做些什麼:除非在方法中使用控制器的請求級別屬性,否則可以調用實例化並調用任何控制器的此類方法。請注意,使用這種方法static(C#)可能會更好,以闡明它不依賴於控制器的屬性。

+0

我相信你在第二段的評論是我尋求的解釋。你是對的,我期待着一種「重定向」類型的行動,但你已經解釋過,情況並非如此。上面回到羅恩上面看看我的評論。我並不需要你提出的解決方案,因爲我不需要任何回報;該方法已經更新了數據庫,這就是我所需要的。謝謝! – Alan

相關問題