Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不显示动态控件_C#_Asp.net - Fatal编程技术网

C# 不显示动态控件

C# 不显示动态控件,c#,asp.net,C#,Asp.net,我正在创建动态控件,当有回帖时,它们不会出现 当有回发时,我会重新绘制控件,但它们不会出现 顺便说一下,这些控件位于更新面板内 代码如下: protected void Page_Load(object sender, EventArgs e) { log.WriteLog("Drawing the menu"); if (IsPostBack) { drawMenu(); } } private void drawMenu() {

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

当有回发时,我会重新绘制控件,但它们不会出现

顺便说一下,这些控件位于更新面板内

代码如下:

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());
            }
        }
}
受保护的无效页面加载(对象发送方,事件参数e)
{
log.WriteLog(“绘制菜单”);
如果(iPostBack)
{
drawMenu();
}
}
私有菜单()
{
if(ViewState[“SubjectList”]!=null)
{
SubjectList=(ArrayList)视图状态[“SubjectList”];
}
for(int i=0;i
尝试将代码移动到
LoadViewState
方法,而不是在
Page\u Load
中,这在执行管道中发生得太晚:

protected override void LoadViewState(object savedState)
{
    log.WriteLog("Drawing the menu");
    if (IsPostBack)
    {
        drawMenu();
    }
    base.LoadViewState(savedState);
}
您需要在每次回发时重新绘制动态控件。所以不需要检查页面
我回来了。检查您的视图状态数据是否在回发后可用。
受保护的无效页面加载(对象发送方、事件参数e)
{
log.WriteLog(“绘制菜单”);
drawMenu();
}
私有菜单()
{
if(ViewState[“SubjectList”]!=null)
{
SubjectList=(ArrayList)视图状态[“SubjectList”];
}
for(int i=0;i
每次加载页面时,必须重新创建动态创建的控件。正确的位置是Page Init事件,而不是Page Load:

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


请阅读并理解。

我删除了UpdatePanel,现在工作正常。我相信这与Updatepanel有关。谢谢您的建议。

如何设置
IsPostBack
值?我的猜测是设置不正确。您是否检查了ViewState[“SubjectList”]是否不为null,并且arraylist是否包含元素?
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);
        }
}