Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 跨重复表单提交尝试保存信息_C#_Asp.net - Fatal编程技术网

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.消息时的错误动作。需要修理。很高兴我能帮上忙!