【问题标题】:Add user control after page is loaded页面加载后添加用户控件
【发布时间】:2010-08-31 21:00:23
【问题描述】:

我试图在加载后将我创建的用户控件动态添加到 aspx 页面。 我尝试向使用 RenderControl 函数的处理程序发送 ajax 请求并发送回控件的 html。我使用 javascript 将它附加到 DOM。

问题是某些控件必须通过它们的 Page_Load 函数,而在使用 RenderControl 函数时不会发生这种情况。

有人知道我该怎么做吗?

【问题讨论】:

  • 出于好奇,为什么要在页面加载完毕后添加呢?加载页面后,您将进入“客户端世界”(html,javasript)。我无法想象一种从客户端添加服务器控件的方法。您需要做一些非常棘手/棘手的事情(将控件添加到更新面板,然后立即触发触发器)
  • 我正在后台加载整个 UI,我不希望客户端感觉到这一点(这会减慢浏览器的速度)。我希望客户端看到页面的一部分,在完成渲染之后,继续并渲染 UI 的其余部分(在页面加载之后)。

标签: asp.net


【解决方案1】:

试试这个:

System.Web.UI.Page page = new System.Web.UI.Page();
CustomUserControl userControl = page.LoadControl("~/control.ascx") as CustomUserControl;
if (userControl == null)
{
//error
}

userControl.ArticleId = id;
//call any other properties or methods you need

page.Controls.Add(userControl);
System.IO.StringWriter sw = new System.IO.StringWriter();
HttpContext.Current.Server.Execute(page, sw, false);
responseString = sw.ToString();

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    【讨论】:

    • 页面已经加载完毕,如何转向服务器动态添加控件(无需按键等)?
    【解决方案3】:

    我认为你不能那样做。

    您的控件不会通过它们的 Page_Load,因为它们没有添加到任何控件中。您所做的只是渲染他们的 html(使用 RenderControl)并使用 javascript 加载它。 Page_Load 事件没有地方。

    我会以这种方式使用 UpdatePanel:

    <asp:UpdatePanel>
        <ContentTemplate>
            <asp:Panel ID="pnlDynamic" />
        </ContentTemplate>
    </asp:UpdatePanel>
    

    然后在后面的代码中将动态控件添加到面板

    pnlDynamic.Controls.Add(new YourControl());
    

    【讨论】:

      猜你喜欢
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多