因此,我向用户展示了有关其帐户的一些信息。但是,管理员可以看到此页面,并决定单击用户的“激活”或“取消激活”。
预期行为 如果管理员在非活动帐户上按下激活,则该信息将查询数据库并在顶部显示该用户的帐户处于活动状态。并显示成功消息。
当前行为: 如果管理员在非活动帐户上按“激活”,信息不会重新查询,则仍会显示该用户的帐户为“非活动”。并显示成功消息。
我在按钮上使用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()函数!!
答案 0 :(得分:2)
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();
}
答案 1 :(得分:1)
这取决于您用于在页面上显示数据的控件。无论如何,您可以尝试拨打this.DataBind()
(或yourLabel.DataBind()
等)。你能展示一些代码吗?