1

我有一段 javascript 处理我的一些表单数据,结果需要提交到我的代码隐藏,以便我可以将其映射到对象并保存到数据库:

这是表格:

<form method="POST" id="paymentForm">
    <span class="payment-errors" runat="server"></span>

    <div>
        <label>
            <span>Card Number</span>
            <br />
            <input type="text" size="20" data-stripe="number" runat="server" placeholder="1111222233334444" />
        </label>
    </div>

    <div>
        <label>
            <span>CVC</span>
            <br />
            <input type="text" size="4" data-stripe="cvc" runat="server" placeholder="123"/>
        </label>
    </div>

    <div>
        <label>
            <span>Expiration (MM/YYYY)</span>
            <br />
            <input type="text" size="2" data-stripe="exp-month" runat="server" placeholder="01"/>
        </label>
        <br />
        <input type="text" size="4" data-stripe="exp-year" runat="server" placeholder="2020"/>
    </div>
    <button type="submit">Submit Payment</button>
</form>

这里是 js 位:

<script type="text/javascript">
    // This identifies your website in the createToken call below
    // You need to put your real publish key here.
    Stripe.setPublishableKey('pk_test_1nDJ3hA1Mv2Sy9bUoYcBMXmm');
    // ...
    // I am using jquery to process the payment. It knows what form to 
    // process it on based on the name 'payment-form'
    jQuery(function ($) {
        //payment submission
        $('#ctl01').submit(function (event) {
            alert('In .submit()');
            var $form = $(this);

            // Disable the submit button to prevent repeated clicks
            $form.find('button').prop('disabled', true);

            Stripe.createToken($form, stripeResponseHandler);

            // Prevent the form from submitting with the default action
            return false;
        });

        //if there is a error, it is displayed on the page if there was
        //no error this is where it gets sent to the server.
        var stripeResponseHandler = function (status, response) {
            var $form = $('#ctl01');

            if (response.error) {
                // Show the errors on the form
                $form.find('.payment-errors').text(response.error.message);
                $form.find('button').prop('disabled', false);
            } else {
                // token contains id, last4, and card type
                var token = response.id;
                // Insert the token into the form so it gets submitted to the server
                $form.append($('<input type="hidden" name="stripeToken" />').val(token));
                // and submit
                $form.get(0).submit();
            }
        };
    });
</script>

所以 js 创建了一个 Stripe 令牌,但是当我点击提交时,我不知道如何让它点击我的代码隐藏。页面只是闪烁,什么都没有。

我试图使按钮成为一个带有事件的asp.net按钮,不好。

我应该在 Page_Load() 中做一些事情,以便能够在 POST 到页面中包含这些数据吗?

4

1 回答 1

1

我看到两个直接选项,具体取决于您要在服务器端代码中执行的操作:

  • 手动调用__doPostBackJavaScript 函数以导致服务器端回发。如果您想与页面上的 ASP.NET 服务器控件进行交互,我会推荐这种方法。

这是另一个 StackOverflow 问题,详细说明了如何在 __doPostBack中发送多个参数。

  • 调用 ASP.NET AJAX 页面方法,它本质上是托管在 ASP.NET 页面内的独立 Web 服务。如果您只想调用一些服务器端逻辑(即从数据库中保存或检索数据),但不需要页面本身的实例,我会推荐这种方法,因为这是一个异步操作并且没有页面控件将可用。这非常适合仅将数据发送到服务器并获取 jQuery 可以处理的数据。

下面介绍如何使用jQuery 直接调用 ASP.NET AJAX 页面方法

于 2013-08-05T00:58:36.667 回答