2009-05-26 3 views
0

В коде позади, я зарегистрировать сценарий запуска, как показано ниже:регистрирующие сценарий несколько раз

string strFunctionName = "ShouldAdd"; 
    sb.Append(strFunctionName + @"((blnShouldAdd ? "true" : "false") + ", true);"); 

    ScriptManager.RegisterStartupScript(this, this.GetType(), "shouldAdd", sb.ToString(), true); 

Эта часть кода вызывается дважды, один раз в загрузке страницы, когда blnShouldAdd вычисляет false и в обработчик события кнопки, когда blnShouldAdd оценивает по true.

Странно, когда я отлаживаю код и вхожу в функцию ShouldAd JS, значение всегда ложно. Я бы предположил, что это правда, поскольку второй вызов в обработчике событий переопределяет первый.

Любые идеи?

ответ

1

Я думаю, вы должны использовать IsStartupScriptBlockRegistered() или IsClientScriptBlockRegistered() метод, чтобы проверить, если сценарий уже был добавлен, и только потрудились RegisterStartupScript, когда он возвращается false.

1

Причина, по которой вам необходимо передать сложные параметры «this» и «this.GetType()» в функцию RegisterStartupScript(), состоит в том, чтобы удостовериться, что данная функция зарегистрирована только один раз. Таким образом, ваш код запускается один раз, а не дважды.

+0

К «ваш код выполняется один раз,» Я предполагаю, что вы имеете в виду функция JS выполняется один раз. Это нормально для меня, пока он выполняется с параметрами, установленными во второй раз. Я не вижу, чтобы это произошло. –

+0

Еще один пример Microsoft, тщательно спланированный заранее, чтобы прервать ваши ожидания. Сценарий будет зафиксирован первым регистром, вам нужно убедиться, что вы его зарегистрируете только один раз (или зарегистрируйте его по желанию в первый раз). – annakata

1

Загрузка страницы также выполняется, когда вы нажимаете кнопку, как часть жизненного цикла страницы asp.net, и запускается перед обработчиком событий кнопки. Итак, когда вы дойдете до обработчика событий кнопки, вы уже зарегистрировали скрипт в Page Load, поэтому запрос на регистрацию другого скрипта с той же (тип, ключ) пары игнорируется.

Возможно, вам необходимо переместить вызов с страницы Load на более позднюю точку жизненного цикла pag, возможно, PreRender в лучшем месте.

0

Я не знаю, нашли ли вы свою проблему. Но у меня была аналогичная проблема, я ее решаю.

Look this post

+0

Любой, кто сталкивается с этим, я предлагаю вам следовать приведенной выше ссылке на ответ Седрика. – RacerNerd

Смежные вопросы