Я обнаружил, что иногда самые простые вещи, которые вы хотите сделать, почти невозможно найти ответ. У меня есть страница ASPX в ASP.NET V2, запрограммированная в Visual Studio 2005. Страница ASPX имеет страницу кода ASXP.VB с дополнительным кодом и связана с файлом .master. У меня есть две кнопки [Button_Process], которые в конечном итоге вызовут программу, которая будет извлекать данные из таблицы SQL - здесь нет проблем. [Button_Process] также вызовет таймер JavaScript, который длится 7 секунд (достаточно времени для извлечения). Мы делаем задержку по таймеру, поэтому появляется симпатичная маленькая графика, которая заставляет человека, использующего страницу, думать, что системы работают, а не дважды щелкать по кнопке - я знаю, что есть другие способы сделать это, но это наш подход для ознакомления) , Опять же здесь нет проблем. test с aleart доставляет сообщение через семь секунд после нажатия кнопки [Button_Process]. До сих пор в мире все хорошо.
У меня есть вторая кнопка, [Button_PM_Upload], которая скрыта в течение этого времени. В конечном итоге он вызовет программу по нажатию кнопки, чтобы получить информацию из предыдущего сбора нажатий кнопки, сравнить ее с данными во второй таблице SQL и обновить вторую таблицу SQL. Все, что я хочу сделать, это сделать эту вторую кнопку видимой после истечения семи секунд. Я очень простая задача, но у меня проблемы с поиском решения.
На главной странице между тегами заголовков есть этот код таймера, который работает замечательно:
<script type="text/javascript">
<!--
var secs
var timerID = null
var timerRunning = false
var delay = 1000
function InitializeTimer()
{
// Set the length of the timer, in seconds
secs = 7
StopTheClock()
StartTheTimer()
}
function StopTheClock()
{
if(timerRunning)
clearTimeout(timerID)
timerRunning = false
}
function StartTheTimer()
{
if (secs==0)
{
StopTheClock()
// Here's where you put something useful that's
// supposed to happen after the allotted time.
// For example, you could display a message:
alert("The timer is working properly")
//document.getElementsByName ("Button_PM_Upload").style.display=
"block";
}
else
{
self.status = secs
secs = secs - 1
timerRunning = true
timerID = self.setTimeout("StartTheTimer()", delay)
}
}
//-->
</script>
На ASPX.VB за кодовой страницей находится этот код для нажатия этой кнопки, и он тоже работает очень хорошо:
Protected Sub Button_Process_OnClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button_Process.Click
'This code fires of the timer in the master file
ClientScript.RegisterStartupScript(GetType(Page), "Startup", "<script type=text/javascript>InitializeTimer()</script>")
End Sub
В течение нескольких дней чтения и исследований я обнаружил, что таймер находится на стороне клиента, а задний код - на стороне сервера, и «никогда оба не разговаривают». Статьи в сети говорят, что для того, чтобы сделать вторую кнопку «захватываемой» с помощью javascript, я должен вместо того, чтобы сказать (visible = false), чтобы изначально сделать ее невидимой до таймера, который находится на стороне сервера и не доставляет кнопку на стороне клиента, Мне нужно настроить команду дисплея. Этот код находится на странице ASPX для этой кнопки и выглядит следующим образом в исходном коде:
<asp:Button ID="Button_PM_Upload" runat="server" Style="display: none; left: 632px;
position: absolute; top: 252px; z-index: 104;" Text="Upload to PartsMaster"
ToolTip="Change PR codes and Descriptions" Width="147px" />
Как говорил мой старший брат в юности: «На данный момент все просто». Следующая часть, о которой говорится в статьях, варьируется между авторами. Однако у всех есть близкое решение, но они не сообщают, где разместить код. Я разместил его под предупреждением в Javascript на главной странице. Вот что я получаю:
document.getElementsByName("Button_PM_Upload").style.display="block";
дает мне - кнопка остается скрытой
document.getElementsByName("Button_PM_Upload").style.display='block';
дает мне - кнопка остается скрытой
document.getElementsByName('Button_PM_Upload').style.display='block';
дает мне - кнопка остается скрытой
document.getElementsByName('Button_PM_Upload').style.display="block";
дает мне - кнопка остается скрытой
Всякий раз, когда я заменяю блок на inline (одно предложение), все четыре строки кода дают мне один и тот же результат (ничего). Всякий раз, когда я заменяю блок видимым (другое предложение), все четыре строки кода дают мне один и тот же результат. Всякий раз, когда я заменяю блок встроенным (другое предложение), все четыре строки кода дают мне один и тот же результат.
Я нашел этот пример, где вы помещаете серверный код в - ("<% = Button_PM_Upload%>") -, но все, что я получаю, это ошибка (независимо от того, как я ее устрою), которая читает это: BC30451: Имя Button_PM_Upload не объявлено.
Мой веб-сайт имеет главную страницу в корне проекта. Также в корне находится папка с именем [PSC_Tools]. Мои страницы ASPX и ASPX.VB находятся в этой папке, и мне интересно, может быть, это проблема простого пути. Что бы это ни было, я нахожусь в тупике - иногда самые простые вещи труднее всего найти код. Инструменты Ajax исключены. Сайт разрабатывался без них, и если он импортирован, он мешает файлу конфигурации, на котором работает сайт.
Я где-то пропустил код? Я не импортирую что-то? Это имеет отношение к файлам config или css? Я в недоумении. Я наткнулся на ваш сайт и чувствовал тепло накопленного интеллекта и опыта, исходящего от моего монитора. Надеюсь, я следовал правилам, задавая вопрос, и был бы очень признателен за любую помощь, которую вы могли бы оказать. И в качестве справки, не могли бы вы сообщить мне точно, где и на какой странице (ASPX, ASXP.VB, .master) должен идти код.
Хороших выходных