Скрипт управления не зарегистрированный скрипт управления - PullRequest
4 голосов
/ 15 декабря 2011

У меня есть страница, которая использует CustomerDetails.ascx. Он использует CM.ascx. Внутри CM.ascx я использую AJAX Data Controls GridView с ID="gdvRecommendation".

Иногда, когда я перехожу на страницу, я получаю следующее исключение:

Элемент управления сценарием 'gdvRecommendation' не является зарегистрированным элементом управления сценарием. Элементы управления сценариями должны быть зарегистрированы с помощью RegisterScriptControl () перед вызовом RegisterScriptDescriptors ().

Имя параметра: scriptControl

  1. Мой ScriptManager определен на главной странице перед заполнителем содержимого.
  2. Это исключение случалось не всегда.
  3. Я использую CustomerDetails.ascx пользовательские элементы управления на других страницах, и это прекрасно работает.

Может кто-нибудь объяснить мне проблему и какое может быть решение?

Edit:
Вот использование GridView в CM.ascx:

<td valign="top" style="height: 150px;">
            <div id="divCMMessage"></div>
            <div id='divRecommendation' style="width: 100%; display: inline; overflow: auto;">
                <ADC:GridView ID="gdvRecommendation" Width="100%" runat="server" CellSpacing="0" CellPadding="3" HorizontalAlign="Right" ShowHeader="false" RowDataBoundEvent="onRowDataBound_gdvRecommendation">
                    <RowStyle Height="20px" />
                    <EmptyDataTemplate>no recommendations</EmptyDataTemplate>
                    <EmptyDataRowStyle HorizontalAlign="Right" BorderWidth="0" />
                    <Columns>
                        <ADC:GridViewImageColumn DataImageUrlField="IndImageUrl" HeaderText="" ItemStyle-Width="25px" ItemStyle-HorizontalAlign="Center"></ADC:GridViewImageColumn>
                        <ADC:GridViewTemplateColumn HeaderText="">
                            <ItemTemplate>
                                <asp:Label ID="TreatName" runat="server" Text=""></asp:Label>
                            </ItemTemplate>
                        </ADC:GridViewTemplateColumn>
                        <ADC:GridViewTemplateColumn HeaderText="">
                            <ItemTemplate>
                                <asp:Label ID="TreatType" runat="server" Text=""></asp:Label>
                            </ItemTemplate>
                        </ADC:GridViewTemplateColumn>
                    </Columns>
                </ADC:GridView>
            </div>
        </td>

CustomerDetails.ascx находится внутри MultiView (на MyPage.aspx).

Ответы [ 4 ]

8 голосов
/ 07 ноября 2012

У меня была похожая проблема, и этот пост помог мне понять мои ошибки:

Элемент управления сценария 'ControlName' не зарегистрированный элемент управления сценария

Итак, вы здесь, потому что получили следующую ошибку:

Элемент управления сценарием 'ControlName' не является зарегистрированным элементом управления сценарием.Элементы управления сценариями должны быть зарегистрированы с помощью RegisterScriptControl () перед вызовом RegisterScriptDescriptors ().

Имя параметра: scriptControl

Я сам довольно много гуглил по этому вопросу, и по сети есть много решений.к сожалению, это все очень конкретные решения сценария.Некоторые люди получают свои ответы, а другие, как и я, не получают.

Ответ:

Вы изменяете видимость элемента управления на неправильной стадиижизненный цикл страницы.

Описание:

Если вы изменяете видимость элемента управления, вы всегда должны делать это во время или перед событием PreRender.Если вы сделаете это после (то есть в обработчике End асинхронной задачи или во время PreRenderComplete), вы можете столкнуться с этой проблемой.

Это не проблема для простых элементов управления, таких как кнопки или текстовые поля.Но это отрицательно скажется на элементах управления, таких как сетки.

Когда я говорю, что изменяю видимость, это может быть одна из следующих ситуаций

  • Имея видимый = ложный элемент управления на ранних этапах жизненного цикла и изменяясь на видимый = true во время конечного обработчика или PreRenderComplete
  • Изменение выбранного представления MultiView во время конечного обработчика или PreRenderComplete
  • Любая другая ситуация, когда элемент управления может быть невидимым на более ранних этапах жизненного цикла страницы, которые настроены для отображения на последнем этапе

Причина:

Чисто, насколько я понимаю, ASP.NET не отображает сценарии или HTML, связанные с элементом управления, если он не показывается пользователю.Регистрация элементов управления сценарием, которая упоминается в исключении, по-видимому, происходит на ранней стадии жизненного цикла.если элемент управления не виден на этом этапе, эта регистрация пропускается для этого элемента управления.Если он сделан видимым на более позднем этапе, вы получаете контроль без некоторых соответствующих сценариев.

В любом случае, это то, что я понял.Я могу ошибатьсяНо если вы столкнетесь с этой проблемой, это определенно поможет вам проверить элементы управления, которые изменяют видимость в разные моменты жизненного цикла.Сделав это, вы сможете определить свою конкретную проблему, а затем самостоятельно найти решение.

Надеюсь, эта информация кому-нибудь поможет.

Источник

1 голос
/ 28 апреля 2014

Я недавно столкнулся с той же проблемой, выше решение не работает для меня. Я скрывал элемент управления, а затем сделал его видимым в PreRender на основе проверки некоторых условий. Сокрытие работало нормально, но когда я снова делал его видимым, оно вызывало ту же ошибку.

ниже то, что у меня сработало, -

ScriptManager sm = ScriptManager.GetCurrent(Page);
sm.RegisterScriptControl(control_name);

Затем отображение элемента управления решило мою проблему.

control_name.Visible = true;

Надеюсь, это может помочь кому-то, кто столкнулся с этой проблемой.

0 голосов
/ 28 апреля 2015

В случае RadAjaxPanel и загрузки UserControls, читая ответ от jhfelectric, я придумал следующее решение (простое): Отключить AJAX при загрузке (Me.EnableAJAX = False) и включить его в PreRender. Поскольку PreRender не вызывается при удалении элемента управления, а вызывается после добавления элемента управления.

0 голосов
/ 19 декабря 2011

У меня была похожая проблема с AJAX, и забавно, что это происходило только в режиме «Отладка».В режиме релиза все работает нормально.Я еще не пришел к выводу об этом.Вы можете дать ему шанс.

...