2011-12-01 41 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