скрытое поле asp.net не устанавливает новое значение, нужно отключить альтернативу - PullRequest
0 голосов
/ 31 марта 2009

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

<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)

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

1 Ответ

1 голос
/ 31 марта 2009

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

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

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

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

...