OnPreRender方法在回发期间不会更改控件状态

时间:2016-03-21 13:15:10

标签: c# asp.net

我有一个带有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);
    }

0 个答案:

没有答案