使用web.config中的引用以编程方式加载UserControl

本文关键字:编程 方式 加载 UserControl 引用 web config 使用 | 更新日期: 2023-09-27 18:20:55

我在Web.config中注册用户控件,如下所示。如何将带有标记名标题的用户控件从代码后面动态加载到占位符中?我使用ASP.NET 4.0

<configuration>
  <system.web>
    <pages>
      <controls>
        <add tagPrefix="blogUc" src="~/Controls/Header/Header.ascx" tagName="header"/>
      </controls>
    </pages>
  </system.web>
</configuration>

使用web.config中的引用以编程方式加载UserControl

这是一篇很好的文章如何以编程方式创建ASP.Net UserControls的实例。不要忘记在代码隐藏文件中放置对UserControl所在命名空间的引用。

// Reference to namespace in Code-Behind file
using MyNamespace.UserControls;
// In code behind class
protected MyUserControl userControl1 = null;

您可以通过编程从web.config中读取pages Section并加载您喜欢的控件。

参考:http://msdn.microsoft.com/en-us/library/system.web.configuration.tagprefixcollection.aspx

以下是可能对您有所帮助的代码。(注意-它在所有控件集合中循环,如果你有一长串控件,这可能是一个性能问题)

PagesSection pagesSection = (PagesSection)WebConfigurationManager.GetWebApplicationSection("system.web/pages");
foreach (TagPrefixInfo tag in pagesSection.Controls)
{
    if (tag.TagName == "header")
    {
        UserControl userControl=  (UserControl) Page.LoadControl(tag.Source);
        PlaceHolder1.Controls.Add(userControl);
        break;
    }
}

调用TemplateControl.ParseControl方法:

Control control = TemplateControl.ParseControl("<blogUc:header runat='server' />");
this.placeHolder.Controls.Add(control);