AJAX ScriptManager в UserControl - PullRequest
       23

AJAX ScriptManager в UserControl

4 голосов
/ 16 марта 2009

У меня есть UserControl, который содержит UpdatePanel, который оборачивает некоторые другие элементы управления. UserControl будет использоваться на некоторых страницах, на которых уже есть ScriptManager, и на других страницах, на которых нет ScriptManager. Я бы хотел, чтобы UserControl автоматически приносил свой собственный ScriptManager, если он не существует.

Я пробовал ScriptManager.GetCurrent, и если он возвращает null, я создаю свой собственный ScriptManager и вставляю его в форму, но я не могу найти место достаточно рано в жизненном цикле UserControl для запуска этого кода. Я продолжаю получать сообщение об ошибке: «Элемент управления с идентификатором« uPnlContentList »требует ScriptManager на странице. ScriptManager должен появляться перед любыми элементами управления, которые в нем нуждаются». каждый раз, когда я пытаюсь загрузить страницу. Места, в которых я пытался запустить мой код, это OnInit, CreateChildControls и PageLoad, и их никогда не вызывают, потому что он умирает до того, как достигнет их.

Где мне поставить этот чек?

Ответы [ 5 ]

11 голосов
/ 16 марта 2009

поместите ScriptManager в вашу MasterPage, на который ссылаются все ваши файлы ASPX. Затем в любом месте сайта, где вам нужно работать с ScriptManager, используйте ScriptManagerProxy, который получит ScriptManager с главной страницы и позволит вам работать с ним в пользовательском элементе управления и в коде.

Теперь вызов ScriptManager.GetCurrent (Page) даст вам ссылку на менеджер скриптов.

<asp:ScriptManagerProxy>
  <Scripts>
    <asp:ScriptReference Path="~/Scripts/myscript.js" />
  <Scripts>
</asp:ScriptManagerProxy>

Вот ссылка:

MSDN Info

2 голосов
/ 16 марта 2009

Я ненавижу приходить к этому в другом направлении, но вы используете главную страницу? И если да, рассматривали ли вы возможность размещения на нем одного ScriptManager и работы с ним?

0 голосов
/ 26 марта 2015

Я сделал 2 вещи, которые работают.

На UserControl сделайте этот Sub:

Public Sub SetFocus()
    txtBox.Focus()
End Sub

На сайте вызова позвоните до вызова ScriptManagerCall

userControl.SetFocus()

Если у вас есть AutoPostback на вашем UserControl, вы также должны установить фокус в событии TextChanged.

Protected Sub txtBox_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtBox.TextChanged
    txtBox.Focus()
    ......
End Sub

Надеюсь, это сработает.

0 голосов
/ 15 мая 2012

Что сработало для меня, так это включение этой строки после

 <asp:ScriptManager ID="scriptManager" runat="server"/>

Это заставило меня задуматься: «... требуется ScriptManager на странице. ScriptManager должен появиться перед любыми элементами управления, которым это необходимо».

0 голосов
/ 16 марта 2009

Я думаю, что событие Init должно работать. Используйте метод, который вы описали (т.е. проверяете, что ScriptManager.GetCurrent возвращает null перед добавлением), но когда вы добавляете ScriptManager, убедитесь, что вы добавили его в качестве первого элемента управления внутри формы.

Я не проверял это, но думаю, что это сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...