Asp.net mvc 在asp.net MVC5中,单击视图的“提交”按钮后,如何执行控制器代码?

Asp.net mvc 在asp.net MVC5中,单击视图的“提交”按钮后,如何执行控制器代码?,asp.net-mvc,vb.net,Asp.net Mvc,Vb.net,VS2013,MVC5,VB 我目前有一个页面,当用户单击付款按钮时,它会成功地向付款处理程序发送帖子。在该视图中提出处理付款的请求后,我想在代码中执行一些附加操作。我不知道怎么做。也许我认为这是完全错误的,但这就是我现在的处境 我假设我将返回到ActionResult函数,在代码中完成最后的工作,然后转到另一个视图,将其发布到支付处理器。我想我问的是,当执行返回视图时,如何强制视图立即发布,这样用户就不必再次单击付款按钮。因此,我的问题是关于从一个控制器发布,因为我所知道的只是如何从一个视图发

VS2013,MVC5,VB

我目前有一个页面,当用户单击付款按钮时,它会成功地向付款处理程序发送帖子。在该视图中提出处理付款的请求后,我想在代码中执行一些附加操作。我不知道怎么做。也许我认为这是完全错误的,但这就是我现在的处境

我假设我将返回到ActionResult函数,在代码中完成最后的工作,然后转到另一个视图,将其发布到支付处理器。我想我问的是,当执行返回视图时,如何强制视图立即发布,这样用户就不必再次单击付款按钮。因此,我的问题是关于从一个控制器发布,因为我所知道的只是如何从一个视图发布

添加到原始帖子:假设我想要执行Sub ClearCart,在点击Payment Submit按钮后,它可能是任意数量的东西。这意味着我现在还不想发布到支付处理程序的网站上,我想先运行一段代码,然后发布到支付处理程序。但为了做到这一点,我只知道如何回到控制器,以便运行子ClearCart。所以现在,在我运行Sub-ClearCart之后,我必须用另一个付款提交按钮设置另一个页面,这次可以继续向付款处理程序发送邮件,因为我已经运行了Sub-ClearCart。但这意味着用户点击支付两次。一次让我回到我可以运行一些代码的地方,然后再次当它的时间去真正的支付处理器

我可能很容易缺乏一些基本的概念,因此我的问题没有太多的意义,但这就是为什么我用我的方式给这条线命名。如果我返回到一个控制器来运行一些代码,我想知道如何有效地从控制器代码强制POST,以便它对用户透明。我解释得更好吗

我认为在MVC中,所有代码都在控制器中运行,视图只是用来设置页面。我并不是真的从页面运行服务器端代码,对吗?一旦我在另一个网站的帖子上点击Submit,我就会离开,直到用户和/或返回付款信息回来。如果我想在用户提交付款后做任何事情,我不知道或不理解如何做

对原始帖子的额外添加:用户单击submit按钮时会有一段时间。一旦完成,操作将转移到“action”参数中的目标,在用户或目标站点做出响应之前,我没有机会做任何事情。如果我想在点击Submit按钮后运行一些代码,我该怎么做?当我开始这个线程时,我并不知道在这个线程中放什么代码来解释我的问题,但是由于这些评论,我现在认为这就是我需要从用户提交的视图中显示的内容:

<form id="simForm" method='post' action='https://test.authorize.net/gateway/transact.dll'>
  ...all the stuff presented or included in the view for the user to make his/her decision
  <input type='submit' value="Submit Payment" class="btn btn-warning" />
</form>
我想在用户提交后做一些事情,例如单击Submit按钮,但是一旦他们单击就太晚了。我想我可以有一个按钮,上面写着提交付款,但不是张贴到我上面的“操作”链接,而是张贴回后续控制器,在那里我可以在用户做出决定后,在他们离开我的网站之前,执行我想运行的代码。但我不明白如何1从后续控制器中启动到支付处理器的真正POST,或2强制后续控制器的视图立即执行到支付处理器的POST,而无需另一个用户操作

现在我已经通过我的想法带大家走上了这段可怕的旅程,我突然想到我想要在控制器中做的是从控制器重定向到一种方式,即将我所有的页面输入都发送到一个外部URL。有这样的方法吗?我唯一熟悉的重定向是在站点内重定向

谢谢

致以最良好的祝愿,
Alan

一种方法是使用ajax返回控制器操作,执行代码,然后让ajax完成提交。以下代码似乎工作正常:

控制员:

Public Class MiscController
  Inherits Controller
  Public Function ActionsBeforeSubmit() As ActionResult
    ClearCart()
    Return New EmptyResult()
  End Function
End Class
观点:

<form id="simForm" method='post' target="_blank" action='https://test.authorize.net/gateway/transact.dll'>
  ...PAGE CONTENT HERE
  <input type='button' onclick="UserCommit()" value="Submit Payment" class="btn btn-warning" />
</form>

<script >
  function UserCommit() {
    $.ajax({
      url: '@Url.Action("ActionsBeforeSubmit", "Misc")'
      async: false,
    })
    $("#simForm").submit()
  }
</script>
单击按钮时,将运行脚本UserCommit。在该脚本中,ajax在重新提交之前运行控制器操作Actions。更新了此帖子:async:false强制提交直到ActionsBeforeResubmit完成。尽管有些文本建议在操作完成后不要使用async:false,但脚本将执行提交

致以最良好的祝愿,
艾伦不清楚你在问什么。为什么不在POST方法中执行其他操作?不清楚这个问题,因为您已经可以执行POST操作,不明白为什么在该操作中无法在返回客户端之前执行所有请求。仍然不清楚,但您可以在提交和返回之前使用ajax调用方法ClearCart
成功或失败的结果otherwise@Stephen-我将花更多的时间在Ajax上,以便从视图中调用控制器代码;我不知道我能做到。我读过关于Ajax的书,现在你们以这种方式提到它,我在概念上理解了,但我显然还不熟悉这一部分。我还将在上面的原始帖子中添加更多信息,以尝试打破僵局,更好地沟通我的问题。Thx.@Alan,从您的编辑中仍然不确定,但是如果您有一个提交按钮,您可以处理它的click事件并调用控制器方法ClearCart来运行一些代码并返回一个或多个值,根据返回的数据,您可以取消帖子或显示消息或继续帖子。Alan,几点评论。1使用,即给按钮一个id和$'yourButton'。单击功能{…2将$simForm.submit放入ajax成功回调中,提交将在操作重新提交完成之前进行,不管您认为会看到什么。@Stephen-如上所述,我更新了我的帖子。退出VS并重新输入后,脚本按原预期异步运行。我们将研究您的评论。BR。