.aspx работает, но .ascx нет… почему и как исправить?

#asp.net #ajax #ascx

#asp.net #ajax #ascx

Вопрос:

Я хочу поместить веб-элемент управления ASTreeView в пользовательский веб-элемент управления, пример кода ASTreeView похож:

 <ct:ASTreeView ID="astvMyTree" 
                    runat="server"
                    ...
                    LoadNodesProvider="~/ASTreeViewDemo5.aspx"

                    .../>
  

LoadNodesProvider — это страница, вызываемая ajax при загрузке узла … однако, если я сменил поставщика на свой файл .ascx, он не работает:

 LoadNodesProvider="~/ASTreeViewDemo5.ascx"
  

он даже не прошел через часть Page_Load файла .ascx
Хотя это может быть связано с самим astreeview, мне интересно, в чем может быть проблема? что я могу сделать, чтобы это исправить?
Спасибо!

Комментарии:

1. Что значит «LoadNodesProvider — это страница, которая называется ajax …» Что такое «страница ajax»? Вы имеете в виду, что это страница обратного вызова ajax?

2. я не совсем знаком с ajax … я видел, что когда я нажимаю, чтобы загрузить узел, ajax вызовет эту страницу LoadNodesProvider для «рендеринга» подузлов…

3. Хорошо, смотрите ответы от Томаса и Порко. Вы не можете использовать пользовательский элемент управления в качестве страницы обратного вызова. Что он делает, так это асинхронный вызов другой страницы с использованием AJAX, и страница отвечает данными для загрузки узлов. Вам нужно вызвать либо страницу, либо веб-службу.

Ответ №1:

Это потому, что ascx должен иметь страницу контейнера ie. Вы не можете использовать его так же, как страницу.

Комментарии:

1. ОК. ответ принят. я использовал страницу. Запрос.Url.GetLeftPart(UriPartial. Путь), чтобы перейти к aspx, где включен элемент управления.

Ответ №2:

ASPX — это страница, а ASCX — пользовательский элемент управления. Вы не можете вызвать элемент управления ajax, поэтому вы, вероятно, хотите, чтобы это была страница с элементом управления на ней.

Ответ №3:

Хотя мне не совсем ясно, что должен делать LoadNodesProvider, если вы хотите инкапсулировать некоторый код или запустить процесс через AJAX, у вас есть несколько вариантов. Одним из них было бы создание веб-службы (для этого вы могли бы использовать WCF), которую мог бы вызывать метод AJAX. Другим вариантом было бы создать http-обработчик (расширение ASHX обычно обозначает это). Использование ASPX или ASCX для этого не имеет для меня большого смысла. Проко и Томас правы в отношении файла ASCX, это пользовательские элементы управления, а не автономные объекты.

Ответ №4:

Если вы действительно, действительно хотите использовать элемент управления ASPX page / ASCX, то, я полагаю, было бы лучше создать пустую страницу ASPX с одним заполнителем, а затем прикрепить свой пользовательский элемент управления (на основе параметров строки запроса или чего-то еще, я думаю) к заполнителю для отображения содержимого для вашегоУправление AJAX

Комментарии:

1. я не уверен, какие элементы управления вы имеете в виду, мой элемент управления или элемент управления astreeview (?) .. Теперь я добавил отдельную страницу в качестве страницы поставщика, но мне нужно использовать какой-то метод из asTreeView в .ascx … поэтому я должен создать еще один дубликат asTreeView в этом aspx, чтобы получить метод … этовсе еще есть ошибки, и я думаю, что код сейчас довольно запутанный… Я расстроен:-(

2. На странице ASPX вы можете использовать <asp:Placeholder id="plcControl" runat="server"> для удержания элемента управления, а затем в своем коде вы можете сделать что-то вроде plcControl.Controls.Add(new asTreeView()) (при условии, что это ваш usercontrol (ascx)).

3. … теперь я понимаю, что вы имеете в виду… это отличается от моей первоначальной цели… Мне нужно поместить ascx в разные места, а не aspx … но все равно спасибо!