动态控件未出现

时间:2013-06-06 10:24:41

标签: c# asp.net

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

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

顺便说一下,控件位于更新面板中。

这是代码:

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 个答案:

答案 0 :(得分:0)

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

protected override void LoadViewState(object savedState)
{
    log.WriteLog("Drawing the menu");
    if (IsPostBack)
    {
        drawMenu();
    }
    base.LoadViewState(savedState);
}

答案 1 :(得分: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);
        }
}

答案 2 :(得分:0)

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

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

请阅读并了解ASP.NET Page Lifecycle

答案 3 :(得分:0)

我删除了UpdatePanel,现在工作正常。我相信它与Updatepanel有关。感谢所有建议。