如何在触发Onclick后刷新页面

时间:2011-12-27 21:26:50

标签: c# asp.net event-handling

因此,我向用户展示了有关其帐户的一些信息。但是,管理员可以看到此页面,并决定单击用户的“激活”或“取消激活”。

预期行为 如果管理员在非活动帐户上按下激活,则该信息将查询数据库并在顶部显示该用户的帐户处于活动状态。并显示成功消息。

当前行为: 如果管理员在非活动帐户上按“激活”,信息不会重新查询,则仍会显示该用户的帐户为“非活动”。并显示成功消息。

我在按钮上使用OnClick和runat =“server”。查询数据库的信息表位于 Page_Load()中。我没有使用“IsPostBack”或任何东西,所以它应该刷新信息。

我是否必须将“重新加载()”“刷新()”“DataBind()”类型函数放在我的“btnUpdate_ OnClick (对象发件人,EventArgs e)”函数的结尾?我该怎么做?

我只是不明白为什么事件生命周期不会完全重新加载页面。

编辑:

一些简化的代码:

protected void Page_Load(object sender, EventArgs e)
  {

      if (Request["uid"] != null)
          userID = Int32.Parse(Request["uid"]);

      UserDAO ud = new UserDAO();
      tblUser u = ud.GetUser(userID);
      AccountStatus.Text = (((Boolean)u.ActiveOrNot) ? "Active" : "Inactive") + "<br />";

 }

 protected void btnActivate_OnClick(object sender, EventArgs e)
  {
      UserDAO udao = new UserDAO();
      int userBeingEdited = -1;

      if (Request["uid"] != null)
      {
          userBeingEdited = Int32.Parse(Request["uid"]);
      }
      if (udao.ActivateUser(userBeingEdited))
      {
          DisplayError("This user has been activated.", true);
      }
 }

其中AccountStats是Asp:标签。 GetUser会查询数据库。

这就是所有相关的代码。

我想知道为什么Onclick不刷新页面并重新加载Page_Load()函数!!

2 个答案:

答案 0 :(得分:2)

OnLoadbtnActivate_OnClick之类的事件处理程序之前触发。由于您在OnLoad中显示状态,因此在下一页加载之前,按钮的点击事件所做的更改不会反映出来。

您可以将显示状态的代码放入OnPreRender,在事件处理程序之后触发,或者您可以添加其他方法来显示状态。

private int _uid;

protected void Page_Load( object sender, EventArgs e )
{
    if( Request["uid"] != null )
    {
        _uid = Int32.Parse( Request["uid"] );
    }
    else
    {
        throw new InvalidOperationException( "uid parameter is missing." );
    }

    DisplayStatus();
}

private void DisplayStatus()
{
    UserDAO ud = new UserDAO();
    tblUser u = ud.GetUser( _uid );
    AccountStatus.Text = ( ( (Boolean)u.ActiveOrNot ) ? "Active" : "Inactive" ) + "<br />";
}

protected void btnActivate_OnClick( object sender, EventArgs e )
{
    UserDAO udao = new UserDAO();
    int userBeingEdited = -1;

    if( _uid > default( int ) )
    {
        userBeingEdited = _uid;
    }
    if( udao.ActivateUser( userBeingEdited ) )
    {
        DisplayError( "This user has been activated.", true );
    }

    DisplayStatus();
}

答案 1 :(得分:1)

这取决于您用于在页面上显示数据的控件。无论如何,您可以尝试拨打this.DataBind()(或yourLabel.DataBind()等)。你能展示一些代码吗?