为什么我对MVS POST函数的调用会跳过RedirectToAction?

时间:2015-10-14 21:54:15

标签: c# asp.net-mvc vb.net

MVC5

这里的实际问题是我的代码工作正常,我不明白为什么,这表明我可能会使用不好的做法。所以我想就此提出意见。这是我为我的应用创建的代码:

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

(注意:当我最初编码Method时,参数列表与POST方法相同,所以我不得不重命名POST方法。我不再需要它了,但我已经完全包含了什么现在正在工作,所以人们正在响应代码本身)

当我创建种子方法时,事实证明MethodDifferentName(...)正是我想要为种子数据库做的事情。因此,我没有复制我认为不好的代码,而是简单地调用现有函数,如下所示:

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

它有效,但我不知道为什么。几个月前我对此进行了编码,并且不记得三思而后行。但是当我踩过种子代码时,我注意到执行步骤是通过MethodDifferentName,它跳过了RedirectToAction()。这引起了我的注意。

我不明白为什么它会跳过RedirectToAction()。谁能解释一下?

1 个答案:

答案 0 :(得分:1)

事情是RedirectToAction实际上并没有在任何地方重定向,它只是构造结果(你在从函数返回时会立即忽略)。

我怀疑你期望RedirectToActionRequest.Redirect(...)的工作方式类似,它会重定向并终止请求的处理,而不是ASP.Net MVC中的情况 - 所有RedirectXXX帮助者只返回{ {1}}仍然需要从操作中返回,以便稍后呈现为实际重定向。

修复 - 从您的新操作中返回RedirectResult的结果。

关于MethodDifferentName执行某些操作的原因:除非您在方法中使用控制器的请求级别属性,否则可以调用实例化并调用任何控制器的此类方法。请注意,您最好使用此类方法MethodDifferentName(C#)来澄清它不依赖于控制器的属性。