Загрузка пользовательских элементов управления с помощью Ajax

Я пытаюсь найти лучший способ загрузки пользовательских элементов управления с помощью Ajax.

Мой первый подход, когда просто использовал UpdatePanel и заполнял его с помощью LoadControl () при обратной передаче ajax, но это привело бы к повторному отображению других загруженных пользовательских элементов управления в том же UpdatePanel. Также у меня не может быть предопределенного набора UpdatePanels, поскольку количество UserControls, которое мне нужно загрузить, будет варьироваться.

Есть ли лучшие практики для этого типа сценария?

При необходимости я мог бы реализовать фреймворк или какой-либо тип настраиваемых элементов управления, если бы это было решением, но я бы хотел сделать это с помощью ASP.NET 3.5 и AjaxControlToolkit, если это возможно.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
4 851
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я не уверен, но, возможно, это руководство Скотта Гатри может быть полезен.

Отличная ссылка - спасибо. Я всегда хотел знать, как это сделать, но у меня никогда не было серьезных причин тратить время на попытки. Если мне понадобится в будущем, теперь у меня есть помощь.

Jason Bunting 11.11.2008 01:30
Ответ принят как подходящий

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

Пропустите UpdatePanels, просто используйте Label, простой старый диапазон или как насчет аббревиатуры ...

Использование JQuery на стороне клиента:

$('#SomeContainer').Load("default.aspx?What=GimmeSomeSweetAjax");

Серверная сторона:

if (Request.QueryString["What"]==GimmeSomeSweetAjax)
{
   Page page = new Page();
   Control control = (Control)LoadControl("~/.../someUC.ascx");
   StringWriter sw = new StringWriter();
   page.Controls.Add(control);
   Server.Execute(page, sw, false);
   Response.Write(sw.ToString());
   Response.Flush();
   Response.Close();
}

Больше ничего не выполняется, и в жизненном цикле страницы есть настоящий кеворковский момент ;-)

вы должны знать, что подход «Server.Execute» и его вставка через InnerHtml НЕ работают для пользовательских элементов управления с элементами управления ajax - теги сценария НЕ выполняются в DOM при вставке через InnerHtml. FIY. попробовал сам и вернулся к updatePanels ...

user264265 02.02.2010 14:13

Пришлось использовать это, чтобы свойства работали!

        var page = new Page();
        var sw = new StringWriter();
        var control = (UserControl)page.LoadControl("~/.../someUC.ascx");

        var type = control.GetType();
        type.GetProperty("Prop1").SetValue(control, value, null);
        page.Controls.Add(control);

        context.Server.Execute(page, sw, false);
        context.Response.ContentType = "text/html";
        context.Response.Write(sw.ToString());
        context.Response.Flush();
        context.Response.Close();

Другие вопросы по теме