Load usercontrols using Ajax

2020-06-06 02:14发布

问题:

Im trying to find a best practice to load usercontrols using Ajax.

My first approach where simply using an UpdatePanel and popuplating it with LoadControl() on ajax postbacks but this would rerender other loaded usercontrols in the same UpdatePanel. Also I cannot have a predefined set of UpdatePanels since the number of UserControls I need to load will vary.

Is there any best practice for this type of scenario?

If needed I could implement a framework or some type of custom controls if that would be a solution but I would love to do this with ASP.NET 3.5 and the AjaxControlToolkit if possible.

回答1:

Probably dozens of high-brow reasons for not doing it this way, but simply initalizing a page, adding the usercontrol, then executing and dump the resulting HTML wherever it may behoove you, is (in my simpleminded view) so mind-numbingly fast & fun that I just have to mention it...

Skip the UpdatePanels, just use a Label, a plain old span, or how about an acronym...

Using JQuery on the client side:

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

Nothing else executes, and the page's lifecycle has a real Kevorkian moment ;-)



回答2:

I'm not sure, but maybe this tutorial by Scott Guthrie could be useful.



回答3:

Had to use this on order to get the properties work!

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


标签: c# asp.net ajax