简短的问题: *需要深呼吸*使用JavaScript,发现.NET控件的ClientID的母版页内深嵌套
我怎能内表的TableRow的客户端ID添加到占位符,这是在用户控件使用MasterPage添加到SharePoint页面的Web部件内部?
解释:
我正在构建一个usercontrol,动态显示SPList项目,每个Web.UI.Table()。 Table()的第二行将首先被隐藏起来,其中一个图像用于启动一些JavaScript以在客户端浏览器中隐藏/显示该行(而不是使用回发或ajax - 我有理由)。
Table()然后被添加到UserControl中的PlaceHolder,然后由WebPart使用,并且该WebPart被添加到SharePoint页面,该页面当然使用MasterPage。考虑到它嵌套得如此之深,我很难找出JavaScript方法来查找TableRow的ClientID。
我的.ascx代码看起来是这样的..
<script type="text/javascript">
function showHidden(itemId) {
var controlId = document.getElementById('<%= phDownloadTable.ClientID %>');
//alert(controlId);
document.getElementById(controlId).style.display = (document.getElementById(controlId).style.display == "table-row") ? "none" : "table-row";
}
</script>
<asp:PlaceHolder ID="phTable" runat="server"></asp:PlaceHolder>
和我的.cs代码隐藏的是这样的..
Table myTable = new Table();
TableRow hiddenRow = new TableRow();
hiddenRow.ID = "row" + itemId;
hiddenRow.Attributes.Add("style","display: none;");
... create TableCells and add to hiddenRow...
TableRow displayRow = new TableRow();
TableCell toggleCell = new TableCell();
Image toggleImage = new Image();
toggleImage.ImageUrl = "/images/myimage";
toggleImage.Attributes.Add("onclick","javascript:showHidden('" + hiddenRow.ClientID + "');
toggleCell.Controls.Add(toggleImage);
displayRow.Cells.Add(toggleCell);
... create more TableCells and add to displayRow
myTable.Rows.Add(displayRow);
myTable.Rows.Add(hiddenRow);
的结果是toggleImage “点击” 显示属性showHidden('row999');
,它将'row999'传递给JavaScript函数,但我无法弄清楚如何获取它引用的TableRow的完整clientId。
我的页面的源显示clientId为ctl00_SPWebPartManager1_g_eda9b9e9_4c7a_48e0_a2aa_fd8cdd65de6c_ctl00_row999
,这比我以前看到的长,似乎包含两个'ct100_'部分,提示多级控件。
任何想法将不胜感激。我已经尝试了所有常见的途径(google.javascript控制客户端id等),但到目前为止我还没有找到任何有用的信息。大多数人都建议document.getElementById('<%= myControl.ClientId %>')...
这很好,但我不知道'myControl ' - 我需要从切换图像发送
手指交叉!
凯文
我想你会设置该行的'clientID'属性,然后你应该能够引用它,不是吗? –
ClientID是一个只读字段,无法设置。我自己想过这件事,并发现了困难的方式:) – QMKevin