以编程方式在web.config中加载UserControl并引用

时间:2012-01-21 14:22:14

标签: c# asp.net user-controls web-config ascx

我在Web.config中注册usercontrols,如下所示。 如何动态加载带有标记名头的usercontrol从代码隐藏到占位符? 我使用ASP.NET 4.0

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

3 个答案:

答案 0 :(得分:0)

这是一篇好文章How to Create Instances of ASP.Net UserControls Programmatically.,不要忘记在代码隐藏文件中引用UserControl所在的命名空间。

// Reference to namespace in Code-Behind file
using MyNamespace.UserControls;

// In code behind class
protected MyUserControl userControl1 = null;

答案 1 :(得分:0)

您可以通过编程方式从web.config中读取页面部分并加载您喜欢的控件。

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

以下是可能对您有所帮助的代码。 (注意 - 它循环遍历所有Controls集合,如果你有很长的控件列表,这可能是性能问题)

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;
    }
}

答案 2 :(得分:0)

调用TemplateControl.ParseControl方法:

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