Скрытое поле asp.net не устанавливает новое значение, требуется отключенная альтернатива

У меня есть скрытое поле на моей странице

<input runat="server" type="hidden" id="selectedIndex" />

и он устанавливается этой связкой кода, событием onclick для строки gridview:

var gridViewCtlId = '<%=GridView.ClientID%>';
var selectedIndex = '#<%=selectedIndex.ClientID%>';
var itemVisible = '<%=ItemVisible.ClientID%>';
var gridViewCtl = null;
var curSelRow = null;
var previousRowIndx = null;

window.onload = function showQuery()
{
    if ($(selectedIndex).val() != undefined)
    {
        if ($(selectedIndex).val() != '')
        {
            var prevRowID = $(selectedIndex).val();
            var prevRow = getSelectedRow(prevRowID);
            prevRow.style.backgroundColor = '#1A8CD4';
        }
    }       
}

 function getGridViewControl(rowIdx)
{
    if (gridViewCtl == null)
    {
        gridViewCtl = document.getElementById(gridViewCtlId);
    }
}

function onGridViewRowSelected(rowIdx)
{   
    if (document.getElementById(gridViewCtlId).disabled == false)
    {
        var selRowCCA = getSelectedRow(rowIdx);
        if (curSelRow != null)
        {   
            var previousRow = getSelectedRow(previousRowIndx);

            var CountIdx = previousRowIndx % 2;
            if (document.getElementById(itemVisible) == null)
            {
                if (CountIdx == 0)
                {
                    previousRow.style.backgroundColor = 'Silver';
                }
                else
                {
                    previousRow.style.backgroundColor = 'White';
                }
            }
        }

        if (null != selRow)
        {
            previousRowIndx = rowIdx;
            curSelRow = selRow;
            selRow.style.backgroundColor = '#1A8CD4';
        }
    }
}
function getSelectedRow(rowIdx)
{
    getGridViewControl(rowIdx);
    if (gridViewCtl != null)
    {
        $(selectedIndex).val(rowIdx);
        return gridViewCtl.rows[rowIdx];
    }
    return null;
}

Вот что происходит: при первой загрузке страницы скрытое поле не определено, как и должно быть. Когда я нажимаю на строку, а затем нажимаю кнопку «Выбрать», которая затем вызывает это:

GridView.Attributes.Add("disabled", "true");

Вид сетки отключается (вместе с кнопкой выбора), и появляется другое представление сетки (что должно произойти в зависимости от того, что выбрано в первом представлении сетки). Итак, вот проблема. Когда я щелкаю строку в представлении сетки (я говорю только о начальном представлении сетки, а не о вторичном, которое появляется, это не проблема) и нажимаю кнопку выбора, все становится серым, и большую часть времени выбранная строка будет выделена при загрузке страницы (в других случаях по какой-то причине по умолчанию используется строка №2). Затем, скажем, вы щелкнули строку 4, затем щелкните строку 1, а затем щелкните выбрать, по какой-то причине строка 4 останется выделенной, а данные строки 4 будут заполнять второе представление сетки, как будто вы никогда не щелкали строку 1. Но если я щелкну строку 4 затем щелкните строку 1, затем снова щелкните строку 1, сохраняет ли она. Кто-нибудь знает, почему так происходит?

Кроме того, я в значительной степени пытаюсь отключить первое представление сетки при нажатии кнопки выбора, поэтому я делаю

GridView.Attributes.Add("disabled", "true");

а не GridView.Enabled = false;

Если пользователь повторно нажимает кнопку поиска (другая кнопка, расположенная ранее на странице, которая делает это представление сетки видимым), я бы хотел, чтобы вторичное представление сетки было скрыто, а основное представление сетки (рассматриваемое) было повторно включено. . Но делаю

GridView.Attributes.Add("disabled", "false");

при срабатывании кнопки поиска отключается только просмотр сетки, что очень странно. Теперь я знаю, что отключенное поле не поддерживается никаким другим браузером, кроме IE, и я использую его только потому, что мне нужно проверить, отключено ли отображение сетки, чтобы пользователь не мог щелкнуть другую строку после того, как сделал свой выбор (что происходит если я не сделаю следующее:

if (document.getElementById(gridViewCtlId).disabled == false)

Так может ли кто-нибудь сообщить мне о другом способе выполнения этой задачи? Еще раз спасибо заранее.


person Community    schedule 31.03.2009    source источник


Ответы (1)


Некоторая информация об отключенных:

  • Браузеры не будут отправлять на сервер значения отключенного элемента управления. Это по определению.
  • Поле Disabled поддерживается другими браузерами, но использует другую модель. Обратите внимание на список поддерживаемых браузеров: http://www.w3schools.com/tags/att_input_disabled.asp (также как это определяется disabled = 'disabled').

Также посмотрите, как он работает в режиме только для чтения: http://www.w3.org/TR/html401/interact/forms.html#h-17.12.2

Также обратите внимание, что согласно стандарту его поддержка ограничена определенными элементами. Это важно, поскольку вы применяете его к неподдерживаемому элементу html, что также является вероятной причиной того, что он не работает в других браузерах в вашем сценарии. Вы можете отключить поддерживаемый элемент управления с помощью сценария, получив элементы управления для его применения, например $ get ("someClientID"). GetElementsByTagName ("input");

person eglasius    schedule 31.03.2009