Я пытаюсь найти лучший способ загрузки пользовательских элементов управления с помощью Ajax.
Мой первый подход, когда просто использовал UpdatePanel и заполнял его с помощью LoadControl () при обратной передаче ajax, но это привело бы к повторному отображению других загруженных пользовательских элементов управления в том же UpdatePanel. Также у меня не может быть предопределенного набора UpdatePanels, поскольку количество UserControls, которое мне нужно загрузить, будет варьироваться.
Есть ли лучшие практики для этого типа сценария?
При необходимости я мог бы реализовать фреймворк или какой-либо тип настраиваемых элементов управления, если бы это было решением, но я бы хотел сделать это с помощью ASP.NET 3.5 и AjaxControlToolkit, если это возможно.





Я не уверен, но, возможно, это руководство Скотта Гатри может быть полезен.
Вероятно, десятки серьезных причин не делать этого таким образом, а просто инициализировать страницу, добавлять пользовательский элемент управления, затем выполнять и выгружать полученный 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 ...
Пришлось использовать это, чтобы свойства работали!
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();
Отличная ссылка - спасибо. Я всегда хотел знать, как это сделать, но у меня никогда не было серьезных причин тратить время на попытки. Если мне понадобится в будущем, теперь у меня есть помощь.