Имейте в виду, что ваша первая строка кода является обратной к возвращаемому значению метода из-за !
.
if (!Page.ClientScript.IsStartupScriptRegistered(Page.GetType(), scriptKey))
Если IsStartupScriptRegistered
возвращает false
, как вы говорите, тогда оператор if должен оценивать true
из-за !
. Это должно привести к тому, что скрипт будет зарегистрирован как ожидалось.
Ваш код основан на моем ответе , который основан на ASP.NET AJAX 1.0 и ASP.NET 2.0. Это может иметь какое-то отношение к .NET 3.5, хотя я полагаю, что я уже использовал вышеупомянутое уже в более новом проекте, который мы сделали под 3.5, и он работал нормально ...
Можете ли вы опубликовать некоторую разметку для кода?
РЕДАКТИРОВАТЬ: Спасибо за размещение разметки.
Теперь я заметил 2 вещи:
Вы упомянули, что используете ToolkitScriptManager
. Это элемент управления, который наследуется от ScriptManager. Я не замечал этого раньше, но ваш код все еще ссылается на ScriptManager напрямую. Вы сказали, что сценарий не работает во время асинхронных обратных передач, поэтому я считаю, что это проблема с вашей ссылкой на ScriptManager. Раньше я никогда не использовал ToolkitScriptManager, поэтому не могу дать вам точный код, но могу сказать, что вам, вероятно, потребуется обновить свой программный код, изменив все ссылки на ScriptManager и его методы / свойства на эквивалентные в ToolkitScriptManager. .
Попробуйте добавить точку останова в операторе if и убедитесь, что она имеет значение true. Я не удивлюсь, если scriptManager
равно null
или scriptManager.IsInAsyncPostBack
равно false
, потому что вы используете ToolkitScriptManager
.
ScriptManager scriptManager = ScriptManager.GetCurrent(page);
if (scriptManager != null && scriptManager.IsInAsyncPostBack)
{
//if a MS AJAX request, use the Scriptmanager class
ScriptManager.RegisterStartupScript(Page, Page.GetType(), scriptKey, script, true);
}
И наконец - ваша разметка выглядит хорошо, за исключением того, что вам не нужен раздел <Triggers>
. Триггеры позволяют вам указать элемент управления, который находится за пределами вашей панели обновления, чтобы вызвать частичный рендеринг. Любой дочерний элемент управления панели обновлений в разделе <ContentTemplate>
сделает это автоматически. Кнопка, на которую вы нацелены в разделе «Триггеры», уже находится на панели обновления. Хотя я не думаю, что это является причиной вашей проблемы, я все равно устраню ее.
Надеюсь, это поможет.