ASP.NET:如何在页面加载之前触发按钮的单击事件

时间:2014-06-12 15:16:04

标签: c# asp.net

我有一个有两个按钮的页面。单击每个按钮将更新数据库表。 下次加载页面时应显示更新的值。

现在,当点击按钮时,我的page_load事件首先触发,保持从会话中获取旧值。

如何更改,以便显示新值?

这是我的一些代码:

的Page_Load:

private void Page_Load(object sender, System.EventArgs e)
{

    myDataSet = Session["myDataset"] as DataSet;

    if( myDataSet != null && myDataSet.Tables[0].Rows.Count > 0 )
    {
        myDBType = myDataSet.Tables[0].Rows[0]["dbType"].ToString();
    }
    else
    {
        myDBType = Connection.GetDBType(someid);
    }

    string displayStatus = "Value1: " + myID.Tables[0].Rows[0][0].ToString() +
        " Value2: " + myDataSet.Tables[0].Rows[0][1].ToString() +
        " Value3: " + myDataSet.Tables[0].Rows[0][5].ToString() + " DBType: " + myDBType;

    string resultScript;
    resultScript = "<script>parent.top.setStatusText('" + displayStatus + "');</script>";
    Page.RegisterClientScriptBlock("resultClientBlock",resultScript);

    SwitchDBType(intmid, permTempCheck, myDbType);
}

我的按钮点击事件:

private void btnSwitchToType1_Click(object sender, Infragistics.WebUI.WebDataInput.ButtonEventArgs e)
{
    myDBType = "Type1";
}


private void btnSwitchToType2_Click(object sender, Infragistics.WebUI.WebDataInput.ButtonEventArgs e)
{
    myDBType = "Type2";
}

由于

4 个答案:

答案 0 :(得分:3)

你错过了:

if(!Page.isPostback)
{
   ...
}

这将确保您在那里的Page_Load代码只执行一次。

我不确定你获得intmid的方式或位置 - 你可能需要将这行代码放在click事件中 - 但我不确定所以我只是将它保存在Page_Load中。< / p>

 SwitchDBType(intmid, permTempCheck, myDbType);

完整代码如下所示:

private void Page_Load(object sender, System.EventArgs e)
{


     if(!Page.isPostback)
     {

         myDataSet = Session["myDataset"] as DataSet;

         if( myDataSet != null && myDataSet.Tables[0].Rows.Count > 0 )
         {
            myDBType = myDataSet.Tables[0].Rows[0]["dbType"].ToString();
         }
         else
         {
             myDBType = Connection.GetDBType(someid);
         }

         string displayStatus = "Value1: " + myID.Tables[0].Rows[0][0].ToString() +
             " Value2: " + myDataSet.Tables[0].Rows[0][1].ToString() +
             " Value3: " + myDataSet.Tables[0].Rows[0][5].ToString() + " DBType: " + myDBType;

         string resultScript;
         resultScript = "<script>parent.top.setStatusText('" + displayStatus + "');     </script>";
         Page.RegisterClientScriptBlock("resultClientBlock",resultScript);

         SwitchDBType(intmid, permTempCheck, myDbType);
    }
}

答案 1 :(得分:2)

您不需要先触发事件。我建议你提取你的业务&#34;逻辑到方法(甚至可能接收DB类型作为参数)。然后在Page_Load中测试此页面加载是否为回发(即在点击按钮之后发生)。如果它不是回发,那么您可以使用会话中的DB类型调用业务逻辑方法。如果它是回发,则您在Page_Load中不执行任何操作,而是更改两个单击处理程序以使用适当的数据库类型值调用业务逻辑方法。

答案 2 :(得分:0)

如果我理解正确,你就无法在页面加载之前触发click事件 因为您可以在此处阅读的页面生命周期:http://msdn.microsoft.com/en-us/library/ms178472(v=vs.85).aspx

你可以通过从页面init调用事件处理函数来“欺骗”但这不是你想要的......

答案 3 :(得分:0)

您应该在OnPreRender方法中放置基于myDBType加载数据的代码。在处理控制事件(按下按钮)后调用此方法。