使用Ajax加载用户控件

我试图找到一个使用Ajax加载用户控件的最佳实践。

我的第一种方法是简单地使用UpdatePanel并在ajax回发上使用LoadControl()对其进行popuplating,但这会在同一个UpdatePanel中重新呈现其他加载的用户控件。 此外,我不能拥有一组预定义的UpdatePanel,因为我需要加载的UserControl数量会有所不同。

这种情况有什么最佳做法吗?

如果需要,我可以实现一个框架或某种类型的自定义控件,如果这将是一个解决方案,但我希望如果可能的话,使用ASP.NET 3.5和AjaxControlToolkit。

可能有几十个高调的理由没有这样做,但只是初始化页面,添加用户控件,然后执行并转储生成的HTML,无论它在哪里,你可能是(在我的简单视图中)如此令人难以置信的快速&有趣的我只需提一下……

跳过UpdatePanels,只使用一个标签,一个普通的旧版本,或者一个缩写词……

在客户端使用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(); } 

没有其他任何执行,页面的生命周期有一个真正的Kevorkian时刻;-)

我不确定,但也许Scott Guthrie的这个教程可能会有用。

不得不使用它来获得属性工作!

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