ASP.NET - загрузить пользовательский элемент управления с помощью AJAX? - PullRequest
4 голосов
/ 18 июня 2010

Я не уверен, возможно ли то, что я пытаюсь сделать, - я просто хочу вызвать пользовательский элемент управления с помощью AJAX и получить отрендеренный HTML-код элемента управления. Однако при попытке получить элемент управления появляется следующее сообщение об ошибке:

Этот тип страницы не обслуживается.

Описание: Запрошенный вами тип страницы не обслуживается, поскольку он был явно запрещен. Расширение .ascx может быть неправильным. Пожалуйста, просмотрите URL ниже и убедитесь, что он написан правильно.

Запрошенный URL: /Controls/ClientFormControl.ascx

Можно ли сделать этот тип страницы обслуживаемым, или вам нужно как-то это назвать? Я знаю, что такие вещи просты в рамках MVC ...

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

Ответы [ 2 ]

8 голосов
/ 18 июня 2010

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

Я бы сказал, что вы могли бы сделать это, но вам нужно создать элемент управления и вызывать рендер программно, как это

TextWriter stringWriter = new StringWriter();
HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);
userControl.RenderControl(htmlWriter);
string html = stringWriter.ToString();

После этого вы должны добавить переменную html к вашему ответу.

Этот код должен быть помещен в метод, помеченный как WebMethod или обработчик HTTP, чтобы вы могли вызывать его из своего javacript.

Пример: вызов WebMethods из javascript

Пример: вызов обработчиков HTTP из JavaScript

3 голосов
/ 18 июня 2010

Вы неправильно смотрите на проблему.Пользовательский контроль не может быть отображен, если он не содержится в WebForm.

Правильное решение этой проблемы - создать страницу, содержащую только пользовательский элемент управления, и затем отобразить / внедрить ее, как требуется.

В качестве альтернативы вы можете использовать панель обновления, а затем программно добавить пользовательский контроль к текущей странице на стороне сервера (что-то вроде события updatepanel_load).работа - проверим это сейчас)

Чтобы продолжить, вот отличный пример: http://geekswithblogs.net/rashid/archive/2007/08/11/Loading-UserControl-Dynamically-in-UpdatePanel.aspx

Похоже, трюк является заполнителем и функцией, которую я не знал о LoadControl ().System.Web.UI.TemplateControl.LoadControl

PlaceHolder1.Controls.Clear();
UserControl uc = (UserControl)LoadControl(controlPath);
PlaceHolder1.Controls.Add(uc);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...