簡短的問題: *需要深呼吸*使用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