У меня динамически названный DIV в GridView, который содержит пользовательский элемент управления с динамически назначенным Parent_ID. Javascript используется для отображения или скрытия DIV. Я покажу вам два примера разных строк без кода ASP.
Строка 1 для заказа № 123456:
<a href="<%#"javascript:collapseExpand('Order_Notes_Panel123456');" %>" >+</a>
<div id='Order_Notes_Panel123456' style="display:none;">
<uc:Comments_Control id="Comments_Control_ID" runat="server" Parent_ID='123456'/>
</div>
Строка 2 для заказа № 678901:
<a href="<%#"javascript:collapseExpand('Order_Notes_Panel678901');" %>" >+</a>
<div id='Order_Notes_Panel678901' style="display:none;">
<uc:Comments_Control id="Comments_Control_ID" runat="server" Parent_ID='678901'/>
</div>
Хорошей новостью является то, что пользовательский контроль связывается и работает отлично. Javascript показывает (устанавливает стиль "display: block;") и скрывает (стиль установлен на "display: none;") соответствующий DIV каждый раз, когда нажимается "+".
Вот моя проблема: в пользовательском элементе есть ссылка "Ответить", которая при щелчке делает пост-назад и помещает элемент управления в режим редактирования. Когда я использую этот пользовательский элемент управления на другой странице без содержания DIV, вы ничего не заметите. Однако, когда "Ответ" выполняет обратную связь, содержащая DIV возвращается к style = "display: none;".
Можете ли вы дать рекомендации о том, как установить родительский стиль DIV на "display: block;" в то время как пользователь явно работает с ним? Я бы предположил, что соответствующий код пойдет в коде позади пользовательского элемента управления, когда он войдет в режим редактирования.
Благодаря,
обкрадывать
Обновление: я понимаю, что в моем DIV нет сервера runat =. Поскольку я пытаюсь установить динамический идентификатор для каждого, я получаю сообщение об ошибке, если попытаюсь использовать runat. Вероятно, это причина, по которой я не могу достичь этого из-за кода...
Я очень доволен собой... (см. Видео на YouTube для этой фразы, вы будете рады, что сделали.)
Таким образом, это то, что я добавил:
1. Новая функция Javascript для добавления имени целевого DIV в скрытое поле (функция "collapseExpand" находится в Site.Master. Я не мог поместить "load_div_to_hidden" в Site.Master, поскольку "myhiddenField" не является настраивается на каждой странице
2. Новое скрытое поле для захвата имени целевой DIV
3. Новая функция Javascript для запуска на window.onload, проверьте, есть ли у нас пост-обратно, а затем отобразите значение из скрытого поля
4. Добавление второго вызова Javascript из href в ссылке
Ниже приведены новые фрагменты кода:
<script type="text/javascript">
function load_div_to_hidden(obj) {
var hidden = document.getElementById('<%= myhiddenField.ClientID %>');
hidden.value = obj;
}
function windowOnLoad() {
var isPostBack = (('<%= IsPostBack %>').toLowerCase() == 'true') ? true : false;
if (isPostBack == true) {
var hid_field_value = document.getElementById('<%= myhiddenField.ClientID %>').value;
var right_div = document.getElementById(hid_field_value);
right_div.style.display = "block";
}
}
window.onload = windowOnLoad;
</script>
<input type="hidden" id="myhiddenField" runat="server" value="" />
<a href="<%#"javascript:collapseExpand('Order_Notes_Panel123456'); javascript:load_div_to_hidden('Order_Notes_Panel123456');" %>" >+</a>
<div id='Order_Notes_Panel123456' style="display:none;">
<uc:Comments_Control id="Comments_Control_ID" runat="server" Parent_ID='123456'/>
</div>
Работает как шарм!