используя JavaScript, найдите ClientID элемента управления .NET, вложенный глубоко в главную страницу - PullRequest
1 голос
/ 21 августа 2011

Короткий вопрос: * делает глубокий вдох *

Как я могу добавить ClientID из TableRow внутри Table в PlaceHolder, который находится в UserControl внутри веб-части и добавлен на страницу SharePoint с помощью MasterPage?

Объяснение:
Я создаю пользовательский элемент управления, который динамически показывает элементы SPList, по одному на Web.UI.Table ().2-я строка Table () будет сначала скрыта, с изображением, используемым для инициализации некоторого JavaScript для скрытия / отображения строки в браузере клиентов (вместо использования обратной передачи или ajax - у меня есть причины).

Затем Table () добавляется в PlaceHolder в UserControl, который затем используется веб-частью, и эта веб-часть добавляется на страницу SharePoint, которая, конечно, использует MasterPage.У меня есть реальная проблема при разработке метода JavaScript, чтобы найти ClientID TableRow, учитывая, что он вложен так глубоко.

Мой код .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);

в результате атрибут "onclick" toggleImage показывает showHidden('row999');, который передает 'row999' в функцию JavaScript, но я не могу понятьтам, как получить полный clientId TableRow, на который он ссылается.

Источник моей страницы показывает, что clientId равен ctl00_SPWebPartManager1_g_eda9b9e9_4c7a_48e0_a2aa_fd8cdd65de6c_ctl00_row999, что больше, чем я привык видеть, и, кажется, содержитдве части 'ct100_', предлагающие несколько уровней управления.

Любые идеи будут с благодарностью.Я пробовал все обычные пути (поиск «javascript .net control client id» и т. П., Но пока не нашел ничего полезного. Большинство предлагает document.getElementById('<%= myControl.ClientId %>')..., что хорошо, но я не знаю,'myControl' - мне нужно это послание от изображения переключения.

Скрещенные пальцы !!

Кевин

Ответы [ 2 ]

2 голосов
/ 21 августа 2011

Если вы не можете установить идентификатор клиента, вы должны быть в состоянии установить класс, и это должно быть учтено .nat.

Им можно выбрать элемент по имени класса.

0 голосов
/ 21 августа 2011

JavaScript не имеет вариантов выбора подстановочных знаков. Попробуйте использовать jQuery, это сделает вещи более гибкими. Тогда вы можете использовать что-то вроде:

$("tr[id*='<%= phDownloadTable.ClientID %>']").css("display", your value);

Таким образом, вы все равно найдете нужный элемент, даже если он перемещен в другое место на странице.

Вот более подробное объяснение о том, как использовать эти селекторы подстановочных знаков: http://api.jquery.com/attribute-contains-selector/

С простым JavaScript вы можете сделать document.getElementsByTagName ('tr') и затем зациклить их, чтобы найти нужный объект.

Если вы используете Framework 4.0, вы можете установить ClientIdMode страницы следующим образом:

Page.ClientIDMode = System.Web.UI.ClientIDMode.Static;

Таким образом, вы можете иметь более предсказуемые идентификаторы клиентов. Например, вы можете иметь идентификаторы без всех префиксов ctl00_.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...