#c# #javascript #asp.net #ajax #updatepanel
#c# #javascript #asp.net #ajax #updatepanel
Вопрос:
Я создаю панель мониторинга, в которой у нас есть 6 панелей обновлений, которые пользователи могут выбирать над каждой из них из ddl, что отображается в UpdatePanel. Когда пользователь изменяет индекс ddl над панелью обновления, вызываются функции на стороне сервера для загрузки соответствующего пользовательского элемента управления. Все отлично работает при начальной загрузке страницы; однако, как только происходит частичная обратная отправка, мне трудно найти правильные html-элементы, используя мою функцию ниже. Сегодня я около 10 часов рыскал по Интернету в поисках ответа и, похоже, не могу найти правильное решение.
Все пользовательские элементы управления используют одну и ту же js-функцию «ActivateGridViewRow». Я пробовал как UniqueID, так и ClientID для ссылки на соответствующие элементы HTML в документе HTML, но ничего не работает хорошо. Обратите внимание, что есть главная страница, и я не могу использовать «this» вместо e.Row.ClientID /UniqueID в качестве аргумента js, потому что не всегда «активируемый» элемент является «строкой» GridView.
Это код из одного из пользовательских элементов управления «GridView_RowDataBound»…
[Control].Attributes.Add("onclick", "ActivateGridViewRow('"
e.Row.DataItemIndex % gv_Trends.PageSize "', '" e.Row.UniqueID "', '"
e.Row.CssClass "', '" e.Row.FindControl("img_ActivateRow").ClientID "', '"
e.Row.FindControl("tr_ChildRow").UniqueID "', 'false')");
Пример js-функции «ActivateGridViewRow»…
function ActivateGridViewRow(RowIndex, RowId, RowCssClass, RowImgId, ChildRowId, DoCallBack) {
if (ChildRowId != "") {
//var Row = $get(RowId);
var Row = $get(RowId);
if (Row == null) Row = $get("ctl00_MainContent_ctl02_" RowId);
var ChildRow = $get(ChildRowId);
if (ChildRow == null) ChildRow = $get("ctl00_MainContent_ctl02_" ChildRowId);
var RowImg = $get(RowImgId);
if (RowImg == null) RowImg = $get("ctl00_MainContent_ctl02_" RowImgId);
if (ChildRow.style.display == '') {
ChildRow.style.display = 'none';
Row.Class = RowCssClass;
Row.style.backgroundColor = "";
if (RowImg != null) RowImg.src = "http://localhost/resources/images/expand_blue.jpg";
return false;
}
else {
ChildRow.style.display = '';
ChildRow.style.backgroundColor = "#F5F5F5";
Row.Class = "";
Row.style.backgroundColor = "#F5F5F5";
if (RowImg != null) RowImg.src = "http://localhost/resources/images/collapse_blue.jpg";
if (DoCallBack == "true") CallServer(RowIndex, "");
return true;
}
}
}
* Примечание — после частичной обратной отправки возвращаемый UniqueID не содержит родительских элементов управления с префиксами (т. Е. идентификатора contentplaceholder и т. Д.)…поэтому он не уникален, если элементы управления используются повторно и т. Д…
Ответ №1:
Всем, кто может прочитать это в будущем…в итоге я передал «this» для всего, что требовало действия js в пользовательском элементе управления…частичные обратные отправки разрушили идентификаторы клиентов, поэтому они стали бесполезными. Единственный способ, которым я обнаружил, что это сработало, — переделать все для передачи ссылок на себя…надеюсь, это поможет кому-то еще 🙂