【问题标题】:Can I just use Page_Load and no button click of the web form?我可以只使用 Page_Load 而没有点击 Web 表单的按钮吗?
【发布时间】:2017-05-16 21:37:08
【问题描述】:

我有一个aspx 网络表单,它有一组控件和一个提交按钮。

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

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

【问题讨论】:

    标签: asp.net webforms


    【解决方案1】:

    是的,如果您完全确定只有一个控件会导致回发,您可以只使用 Page_LoadIsPostBack 标志来添加应该进入按钮单击事件的代码。

    如果有多个控件可能导致 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");
        }
    

    【讨论】:

      【解决方案2】:

      是的,但建议使用 click 事件来获得干净的代码 如果你不使用事件,你可以用

      if(IsPostBack)
      {
         //do something
      }
      

      如果你有多个按钮,你将为每个按钮添加一个条件

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2021-09-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-20
          • 1970-01-01
          相关资源
          最近更新 更多