Visual Studio 不会选择嵌套在 Repeater 中的控件。为此,您将需要使用 FindControl 来访问中继器中的控件。
下面是两个示例,您可以使用它来访问中继器中的控件。
1)循环通过中继器项目
foreach (RepeaterItem item in tableData.Items)
{
if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
{
var ph = (PlaceHolder)item.FindControl("tableBody");
//Do something with your placeholder
ph.Visible = true;
}
}
2)ItemDataBound
在中继器上使用事件
void tableData_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
var ph = (PlaceHolder) e.Item.FindControl("tableBody");
//Do something with your placeholder
ph.Visible = true;
}
}
如果您打算使用该ItemDataBound
事件,则需要将以下属性添加到您的中继器:
OnItemDataBound="tableData_ItemDataBound"
你能澄清一下你到底想用你的占位符做什么吗?占位符没有“innerHTML”属性。我认为您对 JavaScript 有误解。我想你想用一些 Html 填充你的转发器内的控件。您可以改用 Literal。
编辑
使用 Literal 根据数据库中的数据动态填充中继器。
void tableData_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
//Get column from datasource
DataRowView drv = (DataRowView)e.Item.DataItem;
var lit = (Literal) e.Item.FindControl("MyLiteral");
//Populate Literal with data
StringBuilder htmlMarkup = new StringBuilder();
htmlMarkup.AppendFormat("{0}<br />", drv["username"].ToString());
htmlMarkup.AppendFormat("{0}<br />", drv["Name"].ToString());
htmlMarkup.AppendFormat("{0}<br />", drv["lastname"].ToString());
lit.Text = htmlMarkup.ToString();
}
}
如您所见,我正在检索数据并以我想要的格式输出我想要的内容。