Как изменить значение скрытого поля в Gridview, используя Javascript? - PullRequest
1 голос
/ 05 декабря 2008

Хорошо, мне нужно изменить значение скрытого поля в виде сетки, и вот что у меня есть:

for(var i = 0; i < gv_Proofs.rows.length; i++)
{
    var tbl_Cell = gv_Proofs.rows[i].cells[0];
    var sdiFound = false;

    for(var x = 0; x < tbl_Cell.childNodes.length; x++)
    {
        if(tbl_Cell.childNodes[x].id == "_ctl0_MasterContentPlaceHolder_gv_Proofs__ctl2_lbl_SDI")
        {
            if(tbl_Cell.childNodes[x].innerHTML == sdi)
                sdiFound = true;
        }
        if(tbl_Cell.childNodes[x].id == "_ctl0_MasterContentPlaceHolder_gv_Proofs__ctl2_lbl_Updated" && sdiFound)
            tbl_Cell.childNodes[x].value = "true";
    }
}

Может кто-нибудь сказать мне, что я делаю не так? Спасибо!

Ответы [ 4 ]

1 голос
/ 05 декабря 2008

Я получил это работает. Вышеприведенный цикл работал правильно, но, очевидно, мое значение sdi не всегда устанавливалось правильно, и поэтому проверяемое мной значение всегда было установлено в false. Таким образом, вышесказанное сработало отлично в моем случае, если у кого-нибудь снова возникнет эта проблема.

0 голосов
/ 05 декабря 2008

Ваше первое утверждение верно только в том случае, если идентификатор childNode равен (усечен) lbl_SDI. Ваше второе утверждение верно только в том случае, если первое утверждение истинно (через sdiFound) И ИД (усечен) lbl_Updated.

Так что второе утверждение никогда не будет правдой. Переменная sdiFound будет иметь значение true, только когда идентификатор узла не lbl_Updated.

Я думаю, что многие люди, вероятно, не согласны с тем, что вы также ссылаетесь на .NET ID. Рассматривали ли вы использование:

<%= lbl_SDI.ClientID %>

в вашем javascript?

0 голосов
/ 05 декабря 2008

ну, вы можете сказать, что происходит? кажется, что вы забыли сбросить переменную sdiFound в false или разорвать цикл, когда вы его найдете.

насколько ваш вопрос:

если вы запустите скрытый ввод html в качестве серверного элемента управления, то он будет отображаться в GridView и будет иметь уникальный идентификатор. затем вы можете найти его, используя getElementById. Вы можете поместить это в цикл, который создаст правильный идентификатор для вас, и вы сможете найти свой контроль.

0 голосов
/ 05 декабря 2008

Редактировать: классический случай проверки перед публикацией. Видимо, установка hidden = true фактически предотвращает привязку данных, из-за чего у JS возникают проблемы. Я сказал бы, что это одна из тех типичных проблем с ASP.NET, которая заставляет меня ругаться, что это само название, но вы могли бы просто выбрать адаптацию элемента управления с одним из многих googleable решений .

Комментарии об использовании идентификатора элемента в ASP.NET остались без изменений, потому что это зло.


Трудно понять без дополнительного кода (когда это выполняется точно? Перезаписывает ли это что-то еще? Как выглядит разметка?), Но сейчас я могу сказать, что ссылка на элемент по его деформированному идентификатору ASP.NET - это плохо Идея (TM).

Если вы можете, я предлагаю вам попробовать и изменить это в коде, где ссылка обрабатывается для вас, или, по крайней мере, выписать JS там, где вы можете использовать clientID. В противном случае я попытался бы найти элемент с помощью расширенного средства поиска элементов - вашего собственного или библиотечного типа, такого как функция $ $ jquery et al., - которое позволит вам вместо этого использовать надежный аргумент CSS или Xpath.

...