2011-12-01 25 views
0

下面是我正在處理的註冊頁面的簡化版本。跨重複表單提交嘗試的持續信息

當用戶點擊按鈕時,我需要從信用卡上收錢。然後,如果交易成功,請創建新的用戶帳戶。

我的問題是處理信用卡交易成功但創建用戶交易失敗的場景。如果用戶需要更正表格中的某些信息,我不想再次對其卡片進行充值。
根據交易是否成功,我的PaymentStatus變量包含10

這會持續多個按鈕點擊嗎?如果是這樣,在用戶需要更正表單中的某些數據的情況下,這是避免重複事務的可靠方法嗎?
我可以將信息持久存儲到數據庫,但我的優先選擇是在交易存在UserID以將付款與之關聯時在交易中執行此操作。

protected void btn_Click(object sender, ImageClickEventArgs e) 
{ 
    int PaymentStatus = ChargeCardForSignUpFee(userInfo); 

    if (PaymentStatus == 0) 
    { 
     Label1.Text = "Your credit card is invalid. Please try again."; 
    } 
    else 
    { 

     try 
     { 
     MembershipUser newUser = Membership.CreateUser(userInfo); 
      if (newUser == null) 
      { 
       lblStatus.Text = GetErrorMessage(status); 
      } 
      else 
      { 
       CreateCustomer(userInfo); 
       SendWelcomeEmail(userInfo.email); 
       FormsAuthentication.SetAuthCookie(userName, true); 

       Response.Redirect("welcomepage.aspx"); 
      } 
     } 
     catch 
     { 
      lblStatus.Text = "An error occurred while creating your account. "+ 
       "Please check your information and try again. "+ 
       ex.Message; 
     } 
    } 
} 

回答

0

驗證數據,然後爲卡充電。在驗證數據之前對卡進行充電是沒有意義的。

另外,在爲卡充電之前將數據保存到數據庫。

1

驗證數據,然後爲卡充電。在驗證數據之前對卡進行充電是沒有意義的。

+0

我已經做了相當多的工作。但我不認爲我的驗證可以解決創建用戶事務可能失敗的各種可能的原因。我想我正在尋找更多防彈的東西。 – hughesdan

+0

在代碼中,它使用try catch並假定用戶輸入了錯誤的數據,這意味着try catch實際上正在用於用戶表單數據驗證。這不是最佳做法。嘗試catch應該用於異常處理。用戶輸入錯誤的數據應首先通過表單驗證來處理。你使用任何表單驗證? – M3NTA7

+0

只是好奇,你真的想顯示異常消息給最終用戶嗎? 「ex.Message」這可能是一個巨大的安全漏洞。 – M3NTA7