好吧,我对 ASP.NET 还很陌生,但我想我明白发生了什么。我的任务是在其中构建报告。到目前为止,除了这一个问题之外,我已经完成了所有工作。
我使用一个数据绑定到 DataRowCollection 的中继器,并通过它以编程方式构建一个表。我有类似的东西:
Private Sub SubAcctGrid_OnItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs)
If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.Item Then
Dim currentrow = TryCast(e.Item.DataItem, DataRow)
Dim acctSummaryTable = New Table With {.ID = "acctSummary" & e.Item.ItemIndex, .CssClass = "minisub_acct_table"}
Dim drillDownTable = New Table With {.ID = "drillDownTable" & e.Item.ItemIndex, .CssClass = "drilldown_table"}
' Build both tables here
acctSummaryTable.Rows(1).Cells(0).Attributes.Add("onclick", String.Format("displayDetailTable('{0}')", drillDownTable.ID))
acctSummaryTable.Rows(1).Cells(1).Attributes.Add("onclick", String.Format("displayDetailTable('{0}')", drillDownTable.ID))
e.Item.Controls.Add(acctSummaryTable)
e.Item.Controls.Add(drillDownTable)
End If
End Sub
我有一个 Javascript 函数,它接受元素 ID 并隐藏或显示表格:
function displayDetailTable(tableID) {
var table = document.getElementById(tableID)
if (table.style.display == "none") {
table.style.display = "table";
}
else {
table.style.display = "none";
}
}
不过,我终其一生都无法传递正确的元素 ID。据我了解,为了唯一性,ASP.NET 将我分配的 ID 转换为一些巨大的长 ID。例如,我分配了一个 ID 为“drillDownTable0”的表,它在 HTML 标记中输出了“ctl00_drillDownTable0”。它第一次工作,但随后中继器被绑定到一个新行,然后我得到'ctl01_drillDownTable0'等等。
我已经尝试了 ClientID、ID 和 UniqueID,我在上面的代码中将属性添加到单元格中,但它们没有做我需要做的事情。
有什么方法可以获取该 ID 并将其传递给 Javascript 函数?或者我想一个更好的问题是:ID 是什么时候生成的,我可以在页面以 HTML 呈现之前获取它们吗?