Загрузка пользовательских контролей с использованием Ajax - PullRequest
3 голосов
/ 11 ноября 2008

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

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

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

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

Ответы [ 3 ]

8 голосов
/ 11 ноября 2008

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

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

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

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

ServerSide:

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();
}

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

2 голосов
/ 11 ноября 2008

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

1 голос
/ 30 ноября 2012

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

        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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...