C# 跨重复表单提交尝试保存信息
下面是我正在处理的注册页面的简化版本 当用户点击按钮时,我需要从信用卡上取钱。然后,如果交易成功,创建新的用户帐户 我的问题是处理信用卡交易成功但创建用户交易失败的场景。如果用户需要更正表单中的某些信息,我不想再次向他们的卡收费。C# 跨重复表单提交尝试保存信息,c#,asp.net,C#,Asp.net,下面是我正在处理的注册页面的简化版本 当用户点击按钮时,我需要从信用卡上取钱。然后,如果交易成功,创建新的用户帐户 我的问题是处理信用卡交易成功但创建用户交易失败的场景。如果用户需要更正表单中的某些信息,我不想再次向他们的卡收费。 MyPaymentStatus变量包含一个1或一个0,具体取决于交易是否成功 这种情况会在多次单击按钮时持续存在吗?如果是,在用户需要更正表单中的某些数据的情况下,这是避免重复事务的可靠方法吗? 我可以将信息持久化到数据库中,但我的首选是在交易后期,当存在一个User
My
PaymentStatus
变量包含一个1
或一个0
,具体取决于交易是否成功
这种情况会在多次单击按钮时持续存在吗?如果是,在用户需要更正表单中的某些数据的情况下,这是避免重复事务的可靠方法吗?我可以将信息持久化到数据库中,但我的首选是在交易后期,当存在一个
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;
}
}
}
首先验证数据,然后对卡收费。在验证数据之前给卡充电是没有意义的。先验证数据,然后再给卡充电。在验证数据之前给卡充值是没有意义的
另外,在给卡充电之前,请将数据保存到数据库。我已经做了很多。但是我不认为我的验证能够解决创建用户事务失败的所有可能原因。我想我是在寻找更可靠的东西。在代码中,它使用try-catch并假设用户输入了错误数据,这意味着try-catch实际上用于用户表单数据验证。这不是最佳做法。应将Try-catch用于异常处理。用户错误输入的数据应首先通过表单验证进行处理。您是否使用任何表单验证?只是好奇,您真的想向最终用户显示异常消息吗?“ex.Message”这可能是一个巨大的安全漏洞。谢谢。我将重构它,以不使用try-catch。我正在使用asp.net验证控件检查用户输入的数据。这些控制抓住了大部分潜在问题。是的,我在向用户显示ex.消息时的错误动作。需要修理。很高兴我能帮上忙!