2013-08-05 49 views
1

我有一段JavaScript處理一些我的表單數據,結果需要提交給我的代碼隱藏,因此我可以將它映射到一個對象並保存到數據庫:如何將JavaScript方法(JSON對象)的結果發送到asp.net webform上的代碼隱藏?

以下是表單:

<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創建條紋的道理,但我不知道如何得到這個打我的代碼隱藏我擊球的時候提交。該頁面閃爍,沒有任何內容。

我試圖讓按鈕成爲一個事件綁定到一個asp.net按鈕,沒有好處。

我應該在Page_Load()中做些什麼,以便將POST中的這些數據放到頁面中?

+0

你可以擴展一點@mshsayem嗎?我相信我以前見過,但我不知道如何實現它,因爲我需要我的JavaScript執行第一,然後結果發送到代碼隱藏。 – ledgeJumper

回答

1

我看到兩個直接的選擇,這取決於你想在服務器端代碼做什麼:

  • 手動調用__doPostBack JavaScript函數來使服務器端回發。如果你想與頁面上的ASP.NET服務器控件進行交互,我會推薦這種方法。

這裏是另一個問題StackOverflow上,詳細說明如何發送Multiple parameters in __doPostBack

  • 調用一個ASP.NET AJAX頁面方法,它本質上是一個ASP.NET頁面內託管的獨立Web服務。如果您只是想調用某些服務器端邏輯(即從數據庫保存或檢索數據),但我不推薦使用頁面本身的實例,因爲這是一種異步操作,並且沒有任何頁面控件將可用。這非常適合將數據發送到服務器並獲取jQuery可以處理的數據。

以下是如何使用jQuery to directly call ASP.NET AJAX page methods

+0

感謝您的建議!我會試一下! – ledgeJumper

+2

@davidisawesome - 祝你好運,如果你覺得這個答案是有用的,然後隨時upvote和/或接受答案。 –

+0

Upvote現在,但這導致後續問題。我知道有一種理解__DoPostBack(),但它導致我想知道是否應該包裝我需要在其中執行的js,或者我是否在提交按鈕的OnClick =「...」事件中使用它。我用[WebMethod]嘗試了ajax,但沒有達到該方法。這試圖找到錯誤或錯別字.. – ledgeJumper

相關問題