按钮提交呼叫先加载!

Ram*_*Ram 3 c# asp.net

我有一个webform的问题.

我的目标:当页面加载时,它必须将每个文本框加载为空.填写信息并单击提交后,必须提交(UpdatePaymentInfo())

问题:这里,当用户填写信息并单击提交时,它甚至在提交按钮之前调用onload函数并使所有文本框为空.

这是代码:

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);

    string QueryStringupdatecreditcard1 = Request.QueryString.ToString();

    if (String.Equals(QueryStringupdatecreditcard1, "tabID=B"))
    {
        divTitle.Visible = false;
        trmain.Visible = false;
        tdOrderSummary.Visible = false;
        trCCandBilling.Visible = true;
        trtest2.Visible = false;
        divUpdatecreditcard.Visible = true;
        trusecompaddress.Visible = false;

        txtFirstName.Text = "";
        txtLastName.Text = "";
        txtAddress1.Text = "";
        txtAddress2.Text = "";
        txtCity.Text = "";
        txtZip.Text = "";
        txtCardNo.Text = "";
        txtVccNumber.Text = "";
        trAmountCharged.Visible = false;
    }
}

protected void imgbtnSubmit_Click(object sender, ImageClickEventArgs e)
{
    try
    {
        UpdatePaymentInfo();
    }
}
Run Code Online (Sandbox Code Playgroud)

Rob*_*Rob 9

将OnLoad方法的当前内容包装在:

if (!Page.IsPostBack)
{
    // Code in here will only be executed when the page is *not* being loaded by a postback
}
Run Code Online (Sandbox Code Playgroud)

这是因为,根据ASP.NET Page Life Cyle,您在此实例中关注的事情按此顺序发生:

加载 - 在加载期间,如果当前请求是回发,则控制属性将加载从视图状态和控制状态恢复的信息.

回发事件处理 - 如果请求是回发,则调用控件事件处理程序.之后,调用所有验证器控件的Validate方法,该方法设置各个验证器控件和页面的IsValid属性.

所以会发生什么(有点简化):

  1. 单击图像按钮,触发回发.
  2. 表单中的数据将加载到您的控件中.
  3. OnLoad方法会覆盖控件中的值以清除它们.
  4. 您的点击处理程序已运行,但由于步骤3,它会看到空值.

正如其他人排序的所提到的,它不一定是重构你的OnLoad方法,而你这样做是一件坏事.目前你似乎有两件不同的事情:

  • 清除文本字段
  • 设置字段的可见性

可能值得将其分为一个或两个(取决于可见性设置和字段清除是否将独立完成)单独的方法并调整OnLoad方法,使其看起来像这样:

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);

    if (!Page.IsInPostBack)
    {
        SetFieldVisibility();
        ClearFields();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 在答案上超越+1. (2认同)