实际上,我正在使用ASP.NET和C#开发Web模板。
我在listview
页面中有usercontrol
,ItemTemplate
内有PlaceHolder
,如下所示:
<asp:PlaceHolder ID="ph_Lv_EditModule" runat="server"> </asp:PlaceHolder>
我想从后面的代码访问此PlaceHolder
,我使用了不同的方法,但我无法访问它。
PlaceHolder ph_Lv_EditModule = (PlaceHolder)lv_Uc_Module.FindControl("ph_Lv_EditModule");
或
PlaceHolder ph_Lv_EditModule = (PlaceHolder)this.lv_Uc_Module.FindControl("ph_Lv_EditModule");
你可以帮我找一下如何在我的usercontrol
页面后面的代码中找到这个控件。
感谢您的考虑。
答案 0 :(得分:8)
ListView
通常包含多个项目,因此占位符的NamingContainer(由FindControl
搜索)既不是UserControl,也不是ListView本身。这是ListViewItem对象。所以找到参考的地方是ListView's ItemDataBound event。
protected void ListView_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
var ph_Lv_EditModule = (PlaceHolder)e.Item.FindControl("ph_Lv_EditModule");
}
}
如果您需要在其他地方使用引用,则必须迭代ListView的Items,然后在FindControl
上使用ListViewItem
。
顺便说一句,这与GridView或Repeater等其他DataBound控件的行为相同。
答案 1 :(得分:0)
正如Tim Schmelter所提到的,您也可以通过迭代ListView
来访问您的控件,如下所示
private void HideMyEditModule()
{
foreach (var item in lv_Uc_Module.Items)
{
PlaceHolder holder = item.FindControl("ph_Lv_EditModule") as PlaceHolder;
if (holder!= null)
holder.Visible = false;
}
}