0

我正在创建动态控件,当有回帖时它们不会出现。

当有回发时,我正在重绘控件,但它们没有出现。

顺便说一句,控件位于更新面板内。

这是代码:

protected void Page_Load(object sender, EventArgs e)
{
    log.WriteLog("Drawing the menu");
    if (IsPostBack)
    {
        drawMenu();
    }
}

private void drawMenu()
{
        if (ViewState["SubjectList"] != null)
        {
            subjList = (ArrayList)ViewState["SubjectList"];
        }
        for (int i = 0; i < subjList.Count; i++)
        {
            try
            {
                log.WriteLog("Drawing Item:" + i);
                MenuItem item = new MenuItem();
                item.Text = subjList[i].ToString();
                item.Value = i.ToString();
                NavigationMenu.Items.Add(item);
                log.WriteLog("Item Added : " + subjList[i].ToString());
            }
            catch (Exception e)
            {
                log.WriteLog(e.ToString());
            }
        }
}
4

4 回答 4

0

尝试将代码移动到LoadViewState方法中,而不是在Page_Load执行管道中发生得太晚的方法中:

protected override void LoadViewState(object savedState)
{
    log.WriteLog("Drawing the menu");
    if (IsPostBack)
    {
        drawMenu();
    }
    base.LoadViewState(savedState);
}
于 2013-06-06T10:33:46.750 回答
0

您动态创建的控件必须在每次页面加载时重新创建。合适的地方是 Page Init 事件,而不是 Page Load:

如果您的控件需要在回发期间保留值,则必须在加载 ViewState 并将其应用于控件之前重新创建它们 - 这发生在页面加载之前和页面初始化之后。

请阅读并了解ASP.NET 页面生命周期

于 2013-06-06T11:57:08.993 回答
0
You need to redraw the dynamic control at every postback. so no need to check page 
Ispostback. check your viewstate the data become available after postback or not.

protected void Page_Load(object sender, EventArgs e)
{
    log.WriteLog("Drawing the menu");
    drawMenu();

}

private void drawMenu()
{
        if (ViewState["SubjectList"] != null)
        {
            subjList = (ArrayList)ViewState["SubjectList"];
        }
        for (int i = 0; i < subjList.Count; i++)
        {
                MenuItem item = new MenuItem();
                item.Text = subjList[i].ToString();
                item.Value = i.ToString();
                NavigationMenu.Items.Add(item);
        }
}
于 2013-06-06T10:49:00.207 回答
0

我删除了 UpdatePanel,现在工作正常。我相信这与更新面板有关。感谢所有建议。

于 2013-06-10T06:45:27.097 回答