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()。谁能解释一下?
答案 0 :(得分:1)
事情是RedirectToAction
实际上并没有在任何地方重定向,它只是构造结果(你在从函数返回时会立即忽略)。
我怀疑你期望RedirectToAction
与Request.Redirect(...)
的工作方式类似,它会重定向并终止请求的处理,而不是ASP.Net MVC中的情况 - 所有RedirectXXX
帮助者只返回{ {1}}仍然需要从操作中返回,以便稍后呈现为实际重定向。
修复 - 从您的新操作中返回RedirectResult
的结果。
关于MethodDifferentName
执行某些操作的原因:除非您在方法中使用控制器的请求级别属性,否则可以调用实例化并调用任何控制器的此类方法。请注意,您最好使用此类方法MethodDifferentName
(C#)来澄清它不依赖于控制器的属性。