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(),並不想真正改變它的工作方式。我不明白爲什麼第一個例子不起作用。我錯過了什麼?有沒有解決方法?
getPanel()在代碼更改之前和之後的樣子是什麼? –
在第一個示例中,我創建了一個新的UpdatePanel並將其返回。在第二個示例中,我通過引用傳入UpdatePanel,並以這種方式添加控件。 – josh
請至少發佈getPanel方法的匿名版本。否則,不值得看這個問題。 – humblelistener