2015-10-14 66 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

相关问题