所以我向用户展示了一些关于他们帐户的信息。但是,管理员可以查看此页面,并决定在用户上单击"激活"或"停用"。
预期行为:如果管理员在非活动帐户上按激活,则信息将查询数据库并在顶部显示用户帐户处于活动状态。并显示成功消息。
当前行为:如果管理员在非活动帐户上按"激活",则信息不会重新查询,它仍显示用户帐户处于非活动状态。并显示成功消息。
我在按钮上使用OnClick和runat="server"。查询数据库的信息表在 Page_Load(( 中。我没有使用"IsPostBack"或任何东西,所以它应该刷新信息。
我是否必须在"btnUpdate_OnClick(对象发送器,EventArgs e("函数的末尾放置"Reload(("或"Refresh(("或"DataBind((">类型函数?我该怎么做?
我只是不明白为什么事件生命周期不会完全重新加载页面。
编辑:
一些简化的代码:
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:label。GetUser 查询数据库。
这就是所有相关代码。
我想知道为什么 Onclick 不刷新页面并重新加载 Page_Load(( 函数!!
OnLoad
在btnActivate_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();
}
这取决于用于在页面上显示数据的控件。无论如何,您可以尝试致电this.DataBind()
(或yourLabel.DataBind()
等(。你能展示一些代码吗?