Использование таймера Java на странице ASP.NET 2.0 с мастер-файлом - PullRequest
1 голос
/ 15 октября 2010

Я обнаружил, что иногда самые простые вещи, которые вы хотите сделать, почти невозможно найти ответ. У меня есть страница 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) должен идти код.

Хороших выходных

1 Ответ

0 голосов
/ 15 октября 2010

Существует простой обходной путь: оберните кнопку в div:

<div id="x"><asp:Button/></div>

Затем скройте и покажите div.

Если вы хотите отключить кнопку, используйте jQuery, как это:

$('#x button').attr('disabled', 'disabled');

Хитрость заключается в обращении к кнопке через элемент обтекания.

...