从后面的代码调用动态创建的控件
Posted
技术标签:
【中文标题】从后面的代码调用动态创建的控件【英文标题】:Calling Dynamically Created Control From Code Behind 【发布时间】:2016-06-24 07:07:01 【问题描述】:我正在使用htmlGenericControl
方法动态创建一个控件,然后尝试在我的代码中向下几行调用该控件。显然,由于尚未实际创建此控件,因此代码会引发构建错误。有没有办法解决这个问题?这是我正在使用的代码:
foreach(string t in equipmentTypes)
HtmlGenericControl li = new HtmlGenericControl("li");//Create html control <li>
//Create the correct <li> for the equipment type. Using the naming convention tableAbreviation_recordName eg: et_ATV.
li.InnerHtml = "<div id='et_" + t +"' >" + t + "<label><input type='checkbox'></label></div><ul id='make' runat='server'>";
equipmentType.Controls.Add(li);
makes = Statements.GetMake();
foreach(string t in makes)
HtmlGenericControl li = new HtmlGenericControl("li");//Create html control <li>
//Create the correct <li> for the equipment type. Using the naming convention tableAbreviation_recordName eg: et_ATV.
li.InnerHtml = "<div id='mk_" + t + "' >" + t + "<label><input type='checkbox'></label></div>";
make.Controls.Add(li);
所以我正在使用 id='make' 创建<ul>
。我想在下一个 foreach 循环中调用这个<ul>
并附加一些 html 到它。我该怎么办?
经过一些额外的研究,我尝试了Page.FindControl
来查找控件,但是按照代码运行/页面创建的顺序,对象没有设置为对象的实例。所以看起来我可能需要在页面呈现后调用控件?
我用来尝试查找控件的代码与前面的foreach循环相同,除了最后一行。
foreach(string t in makes)
HtmlGenericControl li = new HtmlGenericControl("li");//Create html control <li>
//Create the correct <li> for the equipment type. Using the naming convention tableAbreviation_recordName eg: et_ATV.
li.InnerHtml = "<div id='mk_" + t + "' >" + t + "<label><input type='checkbox'></label></div>";
Page.FindControl("ATV_make").Controls.Add(li);
【问题讨论】:
你能把代码贴在你试图找到这个控件的地方吗? 已更新。我实际上继续尝试使用 ASP:Repeater 控件。我仍然没有它的工作。 您在哪里创建 ID 为“ATV_make”的控件? 对不起,我想我没有正确解释那部分。正在回收的数据库中的值将是 ATV。但我已经找到了使用中继器的解决方法。不过还是谢谢你的回复。 【参考方案1】:经过一番研究,我找到了一个名为 Repeater 的 ASP.NET 控件。这在创建动态 ul 时非常有用。
这是我用来从我的数据库中动态加载值的代码。
<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate><ul></HeaderTemplate>
<ItemTemplate><li><div id="et_"><%# Eval("EquipmentTypeName") %><label><input type="checkbox"></label></div><ul id="_make" runat="server">
<asp:Repeater ID="Repeater2" runat="server" DataSourceID="SQL_Make">
<ItemTemplate>
<li><div id="mk_"><%# Eval("MakeName") %><label><input type="checkbox"></label></div><ul id="_year" runat="server"></ul></li>
</ItemTemplate>
</asp:Repeater>
</ul></li></ItemTemplate>
<FooterTemplate></ul></FooterTemplate>
</asp:Repeater>
【讨论】:
以上是关于从后面的代码调用动态创建的控件的主要内容,如果未能解决你的问题,请参考以下文章