Зарегистрируйте ClientScriptBlock только один раз в течение нескольких обратных передач

На моих сайтах asp.net я регулярно использую следующие методы перед тем, как фактически добавлять либо нестандартные части скрипта, либо регистрировать файл js:

IsClientScriptBlockRegistered(Type, String)

IsClientScriptIncludeRegistered(Type, String)

Когда для страницы требуется собственный фрагмент скрипта, где-то во время загрузки страницы я вызываю IsClientScriptBlockRegisterd() с последующим RegisterClientScriptBlock(),

if (!Page.ClientScript.IsClientScriptBlockRegistered(typeof(Page), "myKey"))
{
  // Start creating ScriptBlock //
  // .. //

  // Actually Register the script //
  ToolkitScriptManager.RegisterClientScriptBlock(this, typeof(Page), "myKey", 
    sbScript.ToString(), false);
}

Приведенный выше код всегда вызывается один раз во время обратной передачи.

Когда пользователь находится на соответствующей странице, оставаясь на этой странице, он может вызвать несколько обратных возвратов (фактические обратные вызовы, а не обратные вызовы). Во время обратной передачи GetRegisteredClientScriptBlocks Метод всегда возвращает пустую коллекцию. Так IsClientScriptBlockRegistered всегда возвращает ложь. Поэтому для каждой обратной передачи мне нужно заново создать пользовательский скрипт-блок, перерегистрировать его на странице и повторно отправить клиенту.

Есть ли способ зарегистрировать пользовательский блок сценариев и позволить ему существовать на клиенте до тех пор, пока пользователь остается на соответствующей странице, или до тех пор, пока сеансы пользователей активны?

Заранее спасибо.

1 ответ

Предполагая, что вы используете ASP.Net WebForms, вы можете использовать следующее свойство, чтобы убедиться, что это обратная передача:

Page.IsPostback()

В качестве альтернативы вы можете передать какую-то переменную flag/cookie/hidden, указывающую, что этой конкретной странице не нужно регистрировать клиентские сценарии.

Другие вопросы по тегам