繁体   English   中英

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

[英]ASP.NET: How to trigger click event for the button before page loads

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

现在,单击按钮时,我的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";
}

谢谢

您不见了:

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

这将确保您拥有的Page_Load代码仅执行一次。

我不知道如何或在哪里你正在intmid -你可能需要把下面这行代码的点击事件里-但我不知道,所以我只是不停地它在Page_Load。

 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);
    }
}

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

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

您可以通过从页面init调用事件处理函数来“作弊”,但这不是您想要的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM