我可以使用Page_Load而无需单击Web表单吗?

时间:2017-05-16 11:08:28

标签: asp.net webforms

我有一个aspx网页表单,其中包含一组控件和一个提交按钮。

  • 在页面的Page_Load事件中,我使用数据填充控件。
  • 在按钮点击事件中,我必须将表单数据保存在数据库中,然后使用Response.Redirect重定向到另一个页面。

在测试过程中,我发现单击按钮时也会调用Page_Load event。我是否可以仅使用Page_Load事件来填充控件并保存数据,而不是使用按钮单击?

3 个答案:

答案 0 :(得分:2)

是的,您只能使用带有Page_Load标志的IsPostBack来添加应该在按钮点击事件中的代码如果您确定只有一个控件会导致回发。

如果有多个控件可能导致PostBack(按钮,单选按钮,下拉菜单等),则每个控件都需要单独的事件处理程序,这些控件将具有单独的逻辑,因为您无法轻易识别哪个控件导致了postBack在PageLoad事件中。

在你只有一个按钮的情况下,我可以在Page_Load中使用IsPostBack检查代码。

但始终建议在Click事件处理程序本身中使用Button Click事件逻辑。这样你就不需要检查IsPostBack了。代码看起来也很干净。

    protected void Page_Load(object sender, EventArgs e)
    {
        FillControls();
        if (IsPostBack) //Will work. But can get executed for postback caused by any other control
        {
            SaveToDB();
            Response.Redirect("URL");
        }            
    }

    protected void Btn_Click(object sender, EventArgs e)
    {
        //Assurance that this code will execute only for PostBack caused by Button.
        SaveToDB(); 
        Response.Redirect("URL");
    }

答案 1 :(得分:2)

是的,你可以,但建议使用click事件来清理代码 如果你不使用事件,你可以用

来做到这一点
if(IsPostBack)
{
   //do something
}

如果您有多个按钮,则会为每个按钮添加条件

 if (IsPostBack)
 {
         string target = Request.Params["__EVENTTARGET"].ToString();
         if (target == "send")
         {
           //do something
         }
         if (target == "update")
         {
             //do something
         }
  }

答案 2 :(得分:1)

page_load是页面生命周期的一部分,你不能排除它的执行,你只能添加对IsPostBack的检查

if(!IsPostBack)
{
//Add Your Page Load Code Here
}