【问题标题】:Call an MVC controller action from a link in a View从视图中的链接调用 MVC 控制器操作
【发布时间】:2014-02-15 18:03:21
【问题描述】:

在我的 MVC 项目中,我需要通过支付提供商处理一些费用。我有一个工作流程,用户选择不同的程序并计算费用。在支付点,我可以查看生成 URL 的位置,用户单击该 URL 并转到支付网关。该链接具有网关所需的一些 JSON 对。但是,当用户单击链接时,我想在带有 UserId 和 TransactionId 的交易表中创建一条新记录,以便在支付网关返回给我后跟踪交易。

所以在我看来,我有这样的东西(简化):

{
    int TotalFees = (some fee calculation)
    string url = "{my JSON string goes here}";
    <a href="https://xyz.com/PayNow?paymentData=@url">Pay By Credit Card/e-Check ($@TotalFees).</a>
}

注意:xyz.com 是外部支付网站。

我在控制器中创建了一个操作方法,但是鉴于我正在发布到另一个站点,如何从我的链接单击中调用此控制器?如何拦截用户点击外部链接并调用控制器?我应该使用按钮执行此 Javascript 并从该方法中重定向到支付提供商吗?

另一种方法是在控制器而不是视图中进行整个费用计算,但这有问题,因为我想在视图上收集用户输入来计算要收取的费用。

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    您能否对控制器执行 html 操作链接,而不是直接发布到最终站点。然后在您的控制器操作中发布帖子?

    【讨论】:

    • 好的,谢谢。我试图弄清楚如何将一些值从前一个视图传递到我的控制器,然后发布到外部站点。
    【解决方案2】:

    我会建议一个不同的设计。提前创建交易对象/数据和/或将其附加到您在订购工作流程期间用于建立订单的任何对象似乎是有意义的。然后,您可以在订单完成后管理其数据/状态(并且交易处于某种待处理状态会很好,因为付款可能实际上并未完成)。简单干净。看来您正以现在的方式将业务逻辑置于您的视图中,特别是如果您在那里进行费用计算。

    【讨论】:

    • 我同意你的看法。最初我想早点跟踪交易(给它一个 ID 等)并给它一个挂起的标志。但我认为如果用户查看费用并点击后退按钮,交易将成为孤立的交易,我想避免这种情况。我想没有办法避免它。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    相关资源
    最近更新 更多