在asp.net MVC5中,如何在单击View的提交按钮后执行控制器代码?

时间:2014-12-03 22:57:16

标签: asp.net-mvc vb.net

VS2013,MVC5,VB

我目前有一个页面,当用户点击付款按钮时,该页面会成功将POST发送到付款处理器。在该视图中处理付款请求后,我想在代码中执行一些其他操作。我不知道该怎么做。可能我认为这完全错了,但那就是我现在的位置。

我假设我将返回ActionResult函数来执行代码中的最终操作,然后转到另一个View以POST到支付处理器。我想我正在询问如何在执行Return View()时强制View立即POST,这样用户就不需要再次单击Payment按钮。我的问题是关于从控制器发布的问题,因为我所知道的是从视图中进行POST。

添加到原始帖子:假设我想在点击“付款提交”按钮后执行Sub ClearCart()(实际上可能是任意数量的事情)。所以这意味着我不想发布到支付处理器的网站,我想先在我的端部再运行一段代码,然后POST到支付处理器。但为了做到这一点,我只了解如何返回控制器以运行Sub ClearCart()。所以现在我运行Sub ClearCart()之后,我必须使用另一个“付款提交”按钮设置另一个页面,这次支付处理器的POST可以继续,因为我运行了Sub ClearCart()。但这意味着用户点击付费两次。一次让我回到我可以运行一些代码的地方,然后再次到达支付处理器真实的时候。

我很容易缺乏一些基本概念,因此我的问题没有多大意义,但这就是我按照我的方式命名这个主题的原因。如果我返回控制器运行一些代码,我想知道如何有效地从Controller代码强制POST,这样它对用户是透明的。我能解释得更好吗?

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

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

<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>

我想在用户提交后做一些事情,即点击提交按钮,但是一旦点击它就太晚了。我原以为我可以有一个按钮,上面写着提交付款,但不是POST到上面的'action'链接,而是POST回到后续控制器,我可以在用户做出决定后执行我想要运行的代码。在他们离开我的网站之前。但我不明白如何(1)从后续控制器内向支付处理器发起真正的POST,或(2)强制后续控制器的视图立即执行POST到支付处理器而不需要另一个用户行动。

现在我已经把所有人带到了这个可怕的旅途中,我想到了我想要在控制器中做什么是从控制器重定向的方式是一个POST,我的所有页面输入到外部URL。有这样的方法吗?我熟悉的唯一重定向是在网站内重定向。

感谢。

最诚挚的问候, 艾伦

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是使用ajax返回Controller Action,执行代码,然后让ajax完成Submit。以下代码似乎工作正常:

控制器:

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运行Controller Action ActionsBeforeSubmit。 更新了这篇文章: async:false需要强制提交等待ActionsBeforeSubmit完成。 (尽管有些文本建议不要使用async:false)Action完成后,脚本会执行提交。

最诚挚的问候, 艾伦