【问题标题】:How to Instantiate User control in Master page cs file如何在母版页cs文件中实例化用户控件
【发布时间】:2024-04-29 20:55:02
【问题描述】:

我已经在母版页的 contentplace holder 中添加了 uc,但是如何在母版页 .cs 文件中实例化用户控件以使其在母版页加载时可见

【问题讨论】:

    标签: asp.net .net-3.5 master-pages user-controls


    【解决方案1】:

    如果我没看错,您在母版页中有一个控件,需要从子页引用它以更改它的可见性?还是我搞错了?

    无论如何,这就是我在 VB .Net 中常用的方法,移植应该不会太难 ;-)

    在aspx页面中:

    <%@ Reference Control="~/path/to/my/customControl.ascx" %>
    

    在代码隐藏中:

    Dim customControl As ASP.customcontrol_ascx = Master.FindControl("customControl")
    If customControl IsNot Nothing Then
        ...
    End If
    

    【讨论】:

      【解决方案2】:

      我不肯定,但我认为您需要使用 Page.LoadControl() 在运行时将用户控件正式加载到页面。

      【讨论】:

      • 在运行时加载的用户控件需要用 LoadControl 加载,而不是“new MyUserControl”,否则不会解析控件的标签,也不会实例化控件的任何子对象。这将导致意外的空控件和恢复视图状态的问题。但无论如何,对于这个特定的问题,我认为这正是 Mark Brackett 所说的...... ContentPlaceHolder 母版页上 中的内容正在被子页面的相应内容标记中的内容所取代(除非内容页面省略了提到的相应标签)。
      【解决方案3】:

      如果您将其添加到 ContentPlaceHolder,并且子页面将内容添加到该 ContentPlaceHolder - 您的用户控件将不再出现。 IOW,您添加的控件只是默认

      如果您希望它始终可见,只需将其添加到 ContentPlaceHolder 之外。

      【讨论】:

      • 换句话说...放置在母版页上 ContentPlaceHolder 内的任何标签都将用作默认内容,但通常它们会被内容页的相应 Content 标签内的标签替换,除非内容页面省略了这样一个对应的内容标签。
      最近更新 更多