使用Ajax加载用户控件

时间:2008-11-10 21:58:43

标签: c# asp.net ajax

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

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

此类情景是否有最佳做法?

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

3 个答案:

答案 0 :(得分:8)

可能有几十个高调的理由没有这样做,只是简单地将页面初始化,添加用户控件,然后执行并转储生成的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时刻; - )

答案 1 :(得分:2)

我不确定,但也许this tutorial by Scott Guthrie可能有用。

答案 2 :(得分:1)

为了让属性有效,必须使用它!

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