2012-12-14 72 views
0

下面的代碼不異步回調過程中更新的UpdatePanel的內容:如果我下面就從方法傳遞迴的UpdatePanel沒有更新

protected void getMoreInfoCommand_Click(object sender, CommandEventArgs e) 
    { 
     Button button = (Button)sender; 
     UpdatePanel updatePanel = (UpdatePanel)button.Parent.Parent; 

     updatePanel.ContentTemplateContainer.Controls.Clear(); 

     switch(e.CommandName) 
     { 
      case "PERSON": 
       Person.Portal.UserProfile userProfile = new Person.Portal.UserProfile(e.CommandArgument.ToString()); 
       updatePanel = getPanel(userProfile, true); 
       break; 
     } 
    } 

    protected UpdatePanel getPanel(object obj, bool more) 
    { 
     UpdatePanel updatePanel = new UpdatePanel(); 
     updatePanel.UpdateMode = UpdatePanelUpdateMode.Conditional; 
     updatePanel.EnableViewState = true; 
     updatePanel.ViewStateMode = System.Web.UI.ViewStateMode.Enabled; 
     updatePanel.ChildrenAsTriggers = true; 
     StringBuilder htmlBuilder = new StringBuilder(); 

     switch (obj.GetType().ToString().Trim()) 
     { 
      case "Person.Portal.UserProfile": 
       Person.Portal.UserProfile userProfile = (Person.Portal.UserProfile)obj; 
       htmlBuilder.Append("<TABLE border='1' cellpadding=3 cellspacing=0 width=20%>"); 

       htmlBuilder.Append("<tr><td colspan=2>"); 
       htmlBuilder.Append("<font color='gray' size=2>Person</font>"); 
       updatePanel.ContentTemplateContainer.Controls.Add(new LiteralControl(htmlBuilder.ToString())); 
       htmlBuilder.Length = 0; 

       Button morePersonButton = new Button(); 
       morePersonButton.ID = "morePersonButton"; 
       morePersonButton.Text = "More"; 
       morePersonButton.CommandName = "PERSON"; 
       morePersonButton.CommandArgument = userProfile.ID; 
       morePersonButton.Command += new CommandEventHandler(getMoreInfoCommand_Click); 

       updatePanel.ContentTemplateContainer.Controls.Add(morePersonButton); 

       htmlBuilder.Append("<tr><td align='center' colspan=2>"); 
       htmlBuilder.Append("<img src='https://webadvisor.oc.edu/pictures/"); 
       htmlBuilder.Append(userProfile.Pic_ID); 
       htmlBuilder.Append(".jpg'>"); 
       htmlBuilder.Append("</tr>"); 

       htmlBuilder.Append("<tr><td>"); 
       htmlBuilder.Append("<B>Name</B><TD>"); 
       htmlBuilder.Append(userProfile.FirstName + " " + userProfile.LastName); 
       htmlBuilder.Append("</tr>"); 

       htmlBuilder.Append("<tr><td>"); 
       htmlBuilder.Append("<B>Email Address</B><TD>"); 
       htmlBuilder.Append(userProfile.EmailAddress); 
       htmlBuilder.Append("</tr>"); 

       htmlBuilder.Append("<tr><td>"); 
       htmlBuilder.Append("<B>Phone</B><TD>"); 
       htmlBuilder.Append(userProfile.Phone); 
       htmlBuilder.Append("</tr>");      

       if (more) 
       { 
        if (!String.IsNullOrEmpty(userProfile.Office_Number)) 
        { 
         htmlBuilder.Append("<tr><td>"); 
         htmlBuilder.Append("<B>Office Building</B><TD>"); 
         htmlBuilder.Append(userProfile.Office_Number); 
         htmlBuilder.Append("</tr>");  
        } 
       } 

       htmlBuilder.Append("</TABLE><BR>"); 

       updatePanel.ContentTemplateContainer.Controls.Add(new LiteralControl(htmlBuilder.ToString())); 

       htmlBuilder.Length = 0; 
       break; 
     } 
     return updatePanel; 
    } 

但是工作原理:

protected void getMoreInfoCommand_Click(object sender, CommandEventArgs e) 
    { 
     Button button = (Button)sender; 
     UpdatePanel updatePanel = (UpdatePanel)button.Parent.Parent; 

     updatePanel.ContentTemplateContainer.Controls.Clear(); 

     switch(e.CommandName) 
     { 
      case "PERSON": 
       Person.Portal.UserProfile userProfile = new Person.Portal.UserProfile(e.CommandArgument.ToString()); 
       getPanel(userProfile, true, ref updatePanel); 
       break; 
     } 
    } 


    protected void getPanel(object obj, bool more, ref UpdatePanel updatePanel) 
    { 
     ... 
    } 

我在別處使用了getPanel(),並不想真正改變它的工作方式。我不明白爲什麼第一個例子不起作用。我錯過了什麼?有沒有解決方法?

+0

getPanel()在代碼更改之前和之後的樣子是什麼? –

+0

在第一個示例中,我創建了一個新的UpdatePanel並將其返回。在第二個示例中,我通過引用傳入UpdatePanel,並以這種方式添加控件。 – josh

+0

請至少發佈getPanel方法的匿名版本。否則,不值得看這個問題。 – humblelistener

回答

0

更新面板已經呈現,您將不得不從它的父級控件集合中替換更新面板。更改Update Panels父級的控件集合將正確更新它。

相關問題