У меня есть веб-страница asp.net, которая содержит сетку с привязанными к ней данными SQL с помощью свойства DataSourceID. Я хочу иметь возможность запускать JavaScript из различных пользовательских событий (например, нажатий кнопок и строк во втором просмотре таблицы) и использовать JavaScript для чтения данных gv1 и выполнения некоторых простых действий. Моя проблема в том, что некоторые из моих вызовов JavaScript видят данные в виде сетки, но много раз все, что я вижу в виде сетки, это заголовок (без строк данных!).
Например, если я помещаю вызовв JavaScript внутри Page_Load (), используя
ScriptManager.RegisterStartupScript(Me, Page.GetType, "Script", "jsPageLoadFirst();", True)
, тогда я всегда вижу данные gridview при начальной загрузке страницы, а также при некоторых обратных передачах. На других обратных передачах, однако, gridview был удален, и все, что я вижу, это заголовок gridview (строки не определены).
Аналогично, если я настрою вызов JavaScript в теле html как
<body id="mybody" onload="JavaScript:myJSsub();">
подпрограмма JavaScript никогда не видит данные вида сетки;только заголовок, но без строк. Я ДУМАЛ, что событие onload клиента произошло только после полной загрузки страницы (включая все привязки данных!), Но, очевидно, нет! Обратите внимание, что я всегда вижу данные gridview, отображаемые на веб-странице, даже перед тем, как нажимать кнопку для вызова JavaScript, поэтому для меня загадка, почему данные gridview иногда удаляются!
Я былпотянув мои волосы на несколько дней, пытаясь понять это. Может кто-нибудь сказать мне, что я делаю неправильно, и как я могу убедиться, что данные строки gridview всегда доступны для моих подпрограмм JavaScript, независимо от того, где (или как) я их запускаю?
Спасибо!
-tom
10/7 обновление: вот немного больше информации, а также возможная работа, которую я придумал сегодня, используя скрытое поле. Во-первых, я в основном обращаюсь к данным gridview в JavaScript, используя вызовы document.getElementById("gv1")
. Итак, для начала, поскольку все данные gridview доступны для подпрограммы JavaScript, которую я запускаю из первого события PageLoad сервера, я попытался сохранить данные gridview как в глобальной переменной «gvar1», так и в скрытом поле на моей странице ». HF1" . Вот как выглядит мой JavaScript:
function jsPageLoadFirst() {
// Save gv1 to a global variable
gvar1 = document.getElementById("gv1");
// *** Also save gv1's html to a hidden field
document.getElementById("hf1").value = document.getElementById("gv1").innerHTML;
}
Теперь в подпрограмме JavaScript, которую я запускаю из события onload () тела, я проверяю значения всех трех. Я всегда нахожу, что 1) document.getElementById("gv1")
показывает только заголовок gridview (но без строк), 2) gvar1
не определено и 3) hf1
выглядит хорошо - все данные строки присутствуют. Точно так же при запуске javascript с серверных загрузок Postback иногда document.getElementById("gv1")
показывает все данные gridview, но иногда он показывает только заголовок gridview, но не данные строки. Может кто-нибудь объяснить мне, почему document.getElementById("gv1")
не всегда показывает данные строки? Я думаю, что если бы я понял это, я мог бы увидеть свой путь, чтобы заставить остальную часть моего кода работать. Спасибо !!!