我有一个带有UserControl“CtrlStatus”的MasterPage“EditMaster”。 CtrlStatus只是检查是否在Session中设置了特定值。如果是,则显示内容,否则保持隐藏状态。
接下来,我有一个Page,它根据我在访问Page时传递的变量,在代码隐藏(动态)中准备带有值和几个按钮的表。每个Button都获得了与处理程序链接的Command / OnClick(两者都试过)事件。
回发后,在处理程序中我在Session中保存了所需的值。哪个应该确保显示CtrlStatus的内容,并且在最好的情况下,它应该在回发的结果上可见 - >这就是我在“OnPreRender”覆盖方法中检查会话值(CtrlStatus)的原因。
但我似乎无法获得有关回发结果的内容。内容仅在刷新/重定向后显示。
CtrlStatus没有任何updatePanel,据我所知,这可能是潜在的问题。但即使它有,我也不知道如何从OnClick处理程序上调用update()。如果我调试整个过程,则会正确评估CtrlStatus中的条件,并将可见性设置为true。
如何强制UserControl显示内容?
1 /动态生成控件的处理程序(在页面中)
private void handleGeneratedBtn(object sender, EventArgs e)
{
LinkButton btn = (LinkButton)sender;
if (btn.CommandName == "UserID")
{
Guid userId;
if (Guid.TryParse(btn.CommandArgument, out userId))
{
setSessionVariable(userId);
updatePanel1.Update();
}
}
}
2 /按钮的生成(在页面中)
int counter = 0;
foreach (var userID in listUsers)
{
TableRow row = new TableRow();
LinkButton b = new LinkButton();
b.ID = "Btn_User_" + counter++;
b.CommandArgument = userID ;
b.CommandName = "UserID";
b.Command += handleGeneratedBtn;
TableCell c = new TableCell();
c.Controls.Add(b);
row.Cells.Add(c);
rows.Add(row);
}
3 / CtrlStatus的OnPreRedner方法(MasterPage中存在的UserControl)
protected override void OnPreRender(EventArgs e)
{
var value = getSessionVariable();
if (value != null)
{
if (value == "something")
{
showContent();
}
else
{
hideContent();
}
}
base.OnPreRender(e);
}