Прокручивать элементы управления в UpdatePanel и получать доступ к JavaScript - PullRequest
1 голос
/ 06 апреля 2009

Я пытаюсь обновить все текстовые поля на моей странице, чтобы преобразовать их в метки следующим образом:

foreach (Control ctrl in masterform.Controls)
{
    if (ctrl.GetType() == typeof(TextBox))
    {
        TextBox t = ctrl as TextBox;
        t.ReadOnly = true;
        t.BackColor = transparent;
        t.BorderWidth = 0;
    }
}

К сожалению, я охватил все текстовые поля панелью обновления и больше не могу получить к ним доступ. Итак, я попробовал это:

foreach (Control ctrl in masterform.Controls)
{
    if (ctrl is UpdatePanel)
    {
        UpdatePanel s = ctrl as UpdatePanel;
        if (s == PartPanel)
        {
            foreach (Control ctrl2 in s.Controls)
            {
                if (ctrl2 is TextBox)
                {
                    TextBox t = ctrl2 as TextBox;
                    t.ReadOnly = true;
                    t.BackColor = transparent;
                    t.BorderWidth = 0;
                }
            }
        }
    }
}

Это просто показывает количество элементов управления панелей равным 1, но внутри достаточно большого количества элементов управления текстовым полем. Любая помощь будет оценена.

Кроме того, у меня есть взаимоисключающие флажки, которые работают следующим образом: если установлен флажок № 1, отметки № 2 или № 3 не могут быть проверены и, как мудро, если флажок № 2 или № 3 отмечен, № 1 не может быть проверен. Таким образом, это означает, что если # 2 и / или # 3 проверены, и пользователь проверяет, # 1, # 2 и # 3 становятся не проверенными, и если # 1 проверен, и пользователь проверяет # 2 и / или # 3, # 1 становится не проверенным , Я написал следующую функцию, чтобы справиться с этим, и она работает, пока панель обновления не обновляется:

var objChkd;
$(document).ready(function() 
{
    $('.mutuallyexclusive1').click(function () 
    {
        checkedState = $(this).attr('checked');
        $('.mutuallyexclusive2:checked').each(function () 
        {
            $(this).attr('checked', false);
        });
        $(this).attr('checked', checkedState);
    });
    $('.mutuallyexclusive2').click(function () 
    {
        checkedState = $(this).attr('checked');
        $('.mutuallyexclusive1:checked').each(function () 
        {
            $(this).attr('checked', false);
        });
        $(this).attr('checked', checkedState);
    });
});  

<input id="Chk1" type="checkbox" runat="server" class="mutuallyexclusive1" /><br />
<input id="Chk2" type="checkbox"  runat="server" class="mutuallyexclusive2" /><br />
<input id="Chk3" type="checkbox" runat="server" class="mutuallyexclusive2" /><br />

Проблема в том, что когда страница загружена, они работают нормально, но если вызывается функция update () панели обновления, они, похоже, теряют соединение с JavaScript, который они должны вызывать. Опять же, любая помощь будет оценена. Спасибо.

1 Ответ

1 голос
/ 06 апреля 2009

Для вашей UpdatePanel, попробуйте это, чтобы рекурсивно найти ваши текстовые поля и обновить их:

void DisableTextBoxes(Control parent)
{
    foreach (Control ctrl in parent.Controls)
    {
        TextBox t = ctrl as TextBox;
        if (t != null)
        {
            t.ReadOnly = true;
            t.BackColor = transparent;
            t.BorderWidth = 0;
        }
        else
        {
            DisableTextBoxes(ctrl);
        }
    }
}

DisableTextBoxes(masterform);

Для флажков ваш скрипт выполняется при загрузке страницы, и обработчики событий привязаны к элементам управления в данный момент. Если флажки являются частью DOM, обновляемой без полной перезагрузки страницы во время обновления UpdatePanel, обработчики событий больше не связаны с ними (они являются новыми элементами). Вам нужно будет снова связать события после частичного обновления страницы.

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