动态添加控件以更新面板 [英] Dynamically add controls to update panel
问题描述
大家好,
我想动态添加控件到更新面板,它们会被添加,但它们没有显示出来。以下是我的代码详情。
设计师:
< asp:UpdatePanel ID = upRequirement runat = server UpdateMode = 始终 >
< ContentTemplate>
< asp:Button ID = btnAdd runat = server Text = + CssClass = button OnClick = btnAdd_Click />
< / ContentTemplate >
<触发器>
< asp:AsyncPostBackTrigger ControlID = btnAddRequirement />
< / 触发器 >
< / asp:UpdatePanel >
Codebehind:
我也试过将代码移到 Page_OnInit 方法但仍然没有运气。
此代码位于 Page_Load 方法内。
< span class =code-keyword> int count = upRequirement.ContentTemplateContainer.Controls.Count;
foreach (需求req in Req)
{
Panel pnlReq = new Panel();
pnlReq.ID = pnl + req.Id;
pnlReq.Width = Unit.Percentage( 100 );
pnlReq.Visible = true ;
Label lblReq = new Label();
lblReq.ID = lbl + req.Id;
lblReq.Text = req.Content;
lblReq.Visible = true ;
Image imgReq = new Image();
imgReq.ID = img + req.Id;
CollapsiblePanelExtender pnlExtReq = new CollapsiblePanelExtender();
pnlExtReq.ID = pnlExt + req.Id;
pnlExtReq.TargetControlID = pnlReq.ID;
pnlExtReq.CollapsedSize = 0 ;
pnlExtReq.ExpandedSize = 300 ;
pnlExtReq.Collapsed = true ;
pnlExtReq.AutoCollapse = false ;
pnlExtReq.AutoExpand = false ;
pnlExtReq.ScrollContents = true ;
pnlExtReq.CollapsedText = 显示详情......;
pnlExtReq.ExpandedText = 隐藏详细信息......;
pnlExtReq.ImageControlID = imgReq.ID;
pnlExtReq.ExpandedImage = 〜/ Images / Col1.jpeg;
pnlExtReq.CollapsedImage = 〜/ Images / Exp1.jpeg;
pnlExtReq.ExpandDirection = CollapsiblePanelExpandDirection.Vertical;
pnlReq.Controls.Add(pnlExtReq);
upRequirement.ContentTemplateContainer.Controls.Add(pnlReq);
upRequirement.ContentTemplateContainer.Controls.Add( new LiteralControl( < br />));
}
count = upRequirement.ContentTemplateContainer.Controls.Count;
如你所见我测试的数字变量计数中的控件数。循环后计数增加但页面加载控件时不可见。有人帮我找到了什么问题?在此先感谢。
您需要在更新面板中占用占位符。试试这个:
HTML:
< asp:updatepanel id = upRequirement runat = server updatemode = 始终 xmlns:asp = < span class =code-keyword>#unknown >
< contenttemplate >
< asp:占位符 id = PlaceHolder1 runat = server >
< / asp:placeholder >
< asp:按钮 id = btnAdd runat = server text = + cssclass = < span class =code-keyword> button onclick = btnAdd_Click / >
< / contenttemplate >
< 触发器 >
< asp:asyncpostbacktrigger controlid = btnAddRequirement / >
< ; /触发器 >
< / asp:updatepanel >
代码隐藏(C#) - PreInIt事件:
int count = upRequirement.ContentTemplateContainer.Controls.Count;
foreach (需求req in Req)
{
Panel pnlReq = new Panel();
pnlReq.ID = pnl + req.Id;
pnlReq.Width = Unit.Percentage( 100 );
pnlReq.Visible = true ;
Label lblReq = new Label();
lblReq.ID = lbl + req.Id;
lblReq.Text = req.Content;
lblReq.Visible = true ;
Image imgReq = new Image();
imgReq.ID = img + req.Id;
CollapsiblePanelExtender pnlExtReq = new CollapsiblePanelExtender();
pnlExtReq.ID = pnlExt + req.Id;
pnlExtReq.TargetControlID = pnlReq.ID;
pnlExtReq.CollapsedSize = 0 ;
pnlExtReq.ExpandedSize = 300 ;
pnlExtReq.Collapsed = true ;
pnlExtReq.AutoCollapse = false ;
pnlExtReq.AutoExpand = false ;
pnlExtReq.ScrollContents = true ;
pnlExtReq.CollapsedText = 显示详情......;
pnlExtReq.ExpandedText = 隐藏详细信息......;
pnlExtReq.ImageControlID = imgReq.ID;
pnlExtReq.ExpandedImage = 〜/ Images / Col1.jpeg;
pnlExtReq.CollapsedImage = 〜/ Images / Exp1.jpeg;
pnlExtReq.ExpandDirection = CollapsiblePanelExpandDirection.Vertical;
pnlReq.Controls.Add(pnlExtReq);
upRequirement.ContentTemplateContainer.Controls.Add(pnlReq);
upRequirement.ContentTemplateContainer.Controls.Add( new LiteralControl( < br />));
PlaceHolder1.Controls.Add(pnlReq);
PlaceHolder1.Controls.Add( new LiteralControl( < br />));
}
count = upRequirement.ContentTemplateContainer.Controls.Count;
--Amit
Hello all,
I want to add controls dynamically to a update panel, they are getting added but they are not getting displayed. Below is my code details.
The designer:
<asp:UpdatePanel ID="upRequirement" runat="server" UpdateMode="Always">
<ContentTemplate>
<asp:Button ID="btnAdd" runat="server" Text="+" CssClass="button" OnClick="btnAdd_Click" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnAddRequirement" />
</Triggers>
</asp:UpdatePanel>
Codebehind:
I also tried moving the code to Page_OnInit method but still no luck.
This code is inside the Page_Load method.
int count = upRequirement.ContentTemplateContainer.Controls.Count;
foreach(Requirement req in Req)
{
Panel pnlReq = new Panel();
pnlReq.ID = "pnl" + req.Id;
pnlReq.Width = Unit.Percentage(100);
pnlReq.Visible = true;
Label lblReq = new Label();
lblReq.ID = "lbl" + req.Id;
lblReq.Text = req.Content;
lblReq.Visible = true;
Image imgReq = new Image();
imgReq.ID = "img" + req.Id;
CollapsiblePanelExtender pnlExtReq = new CollapsiblePanelExtender();
pnlExtReq.ID = "pnlExt" + req.Id;
pnlExtReq.TargetControlID = pnlReq.ID;
pnlExtReq.CollapsedSize = 0;
pnlExtReq.ExpandedSize = 300;
pnlExtReq.Collapsed = true;
pnlExtReq.AutoCollapse = false;
pnlExtReq.AutoExpand = false;
pnlExtReq.ScrollContents = true;
pnlExtReq.CollapsedText = "Show details...";
pnlExtReq.ExpandedText = "Hide details...";
pnlExtReq.ImageControlID = imgReq.ID;
pnlExtReq.ExpandedImage = "~/Images/Col1.jpeg";
pnlExtReq.CollapsedImage = "~/Images/Exp1.jpeg";
pnlExtReq.ExpandDirection = CollapsiblePanelExpandDirection.Vertical;
pnlReq.Controls.Add(pnlExtReq);
upRequirement.ContentTemplateContainer.Controls.Add(pnlReq);
upRequirement.ContentTemplateContainer.Controls.Add(new LiteralControl("<br />"));
}
count = upRequirement.ContentTemplateContainer.Controls.Count;
As you can see I test the number of controls in the variable count. The count is getting increased after the loop but when the page loads controls are not visible. What is the problem can someone help me find it? Thanks in advance.
You need to take a place holder in your update panel. Try this:
HTML:
<asp:updatepanel id="upRequirement" runat="server" updatemode="Always" xmlns:asp="#unknown"> <contenttemplate> <asp:placeholder id="PlaceHolder1" runat="server"> </asp:placeholder> <asp:button id="btnAdd" runat="server" text="+" cssclass="button" onclick="btnAdd_Click" /> </contenttemplate> <triggers> <asp:asyncpostbacktrigger controlid="btnAddRequirement" /> </triggers> </asp:updatepanel>
Code Behind(C#) -- PreInIt Event:
int count = upRequirement.ContentTemplateContainer.Controls.Count; foreach(Requirement req in Req) { Panel pnlReq = new Panel(); pnlReq.ID = "pnl" + req.Id; pnlReq.Width = Unit.Percentage(100); pnlReq.Visible = true; Label lblReq = new Label(); lblReq.ID = "lbl" + req.Id; lblReq.Text = req.Content; lblReq.Visible = true; Image imgReq = new Image(); imgReq.ID = "img" + req.Id; CollapsiblePanelExtender pnlExtReq = new CollapsiblePanelExtender(); pnlExtReq.ID = "pnlExt" + req.Id; pnlExtReq.TargetControlID = pnlReq.ID; pnlExtReq.CollapsedSize = 0; pnlExtReq.ExpandedSize = 300; pnlExtReq.Collapsed = true; pnlExtReq.AutoCollapse = false; pnlExtReq.AutoExpand = false; pnlExtReq.ScrollContents = true; pnlExtReq.CollapsedText = "Show details..."; pnlExtReq.ExpandedText = "Hide details..."; pnlExtReq.ImageControlID = imgReq.ID; pnlExtReq.ExpandedImage = "~/Images/Col1.jpeg"; pnlExtReq.CollapsedImage = "~/Images/Exp1.jpeg"; pnlExtReq.ExpandDirection = CollapsiblePanelExpandDirection.Vertical; pnlReq.Controls.Add(pnlExtReq); upRequirement.ContentTemplateContainer.Controls.Add(pnlReq); upRequirement.ContentTemplateContainer.Controls.Add(new LiteralControl("<br />")); PlaceHolder1.Controls.Add(pnlReq); PlaceHolder1.Controls.Add(new LiteralControl("<br />")); } count = upRequirement.ContentTemplateContainer.Controls.Count;
--Amit
这篇关于动态添加控件以更新面板的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!