【问题标题】:Load usercontrols using Ajax使用 Ajax 加载用户控件
【发布时间】:2008-11-10 21:58:42
【问题描述】:

我正在尝试寻找使用 Ajax 加载用户控件的最佳实践。

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

这种情况有什么最佳实践吗?

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

【问题讨论】:

    标签: c# asp.net ajax


    【解决方案1】:

    可能有几十个不这样做的高级理由,而只是初始化一个页面,添加用户控件,然后执行并转储生成的 HTML,无论它可能适合你,(在我头脑简单的观点中)如此介意 -令人麻木的快速和有趣,我不得不提一下......

    跳过更新面板,只使用标签、普通的旧跨度或首字母缩略词...

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

    【讨论】:

    • 您必须知道'Server.Execute' 方法并通过 InnerHtml 插入它不适用于带有 ajax 控件的用户控件 - 通过 InnerHtml 插入时,脚本标签不会在 DOM 上执行。嗨。自己尝试了一下,然后又回到了 updatePanels...
    【解决方案2】:

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

    【讨论】:

    • 很好的链接 - 谢谢。我一直想知道如何做到这一点,但从来没有真正有充分的理由花时间尝试。如果我将来需要,现在我有一些帮助。
    【解决方案3】:

    必须使用它才能使属性正常工作!

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多