【问题标题】:How to add user control on run time in ASP.NET?如何在 ASP.NET 中添加用户对运行时的控制?
【发布时间】:2012-01-30 19:10:34
【问题描述】:

如何在 ASP.NET 中动态添加页面加载用户控件?

我有一个带有 ID="contentData" 和几个控件的 div

  • one.ascx
  • 两个.ascx
  • 三个.ascx

现在我创建了一个页面default.aspx,它可以通过以下方式之一获取查询字符串中的参数:

default.aspx?val=one  
default.aspx?val=two  
default.aspx?val=three

我从

中获取价值
Request.QueryString["val"]

现在如何在其中加载特定控件?

<div ID="controlData"></div>

【问题讨论】:

    标签: c# asp.net user-controls


    【解决方案1】:

    在你的 aspx 中

    <div id="div1" runat="server">
    
    </div>
    

    在 Page_Load 中

        UserControl uc = (UserControl)Page.LoadControl("test.ascx");
        div1.Controls.Add(uc);
    

    您需要做的就是通过添加 runat="server" 来绑定您的 div 服务器,并在代码隐藏中使用 Page.LoadControl 出去并获取您的用户控件,然后使用 div 的 Controls.Add 将其添加到您的 div

    【讨论】:

    • 也可以用 Panel 替换该 div,以便更轻松地与服务器上的实例进行映射(在某些情况下,当 runat=server 添加到 html 元素时,VS 不会自动生成成员)。根据查询的值构建到 ascx 的路径。验证或包装在 try-catch 中;处理不存在的。对于通用控件放置,以“~”字符开头构建路径(例如“~/controls/”+this.Request.QueryString[“val”]+“.ascx”) - 但是,再次验证来自查询的值.
    • 我第二次验证来自查询的值。
    • 在阅读了这些答案和一些文章之后,我现在能够做得更好,Page_Init() 是我必须应用代码的函数,但我需要在 !Page 中编写代码吗?是回邮吗?如果是,为什么这个函数是用户?
    【解决方案2】:
    // Load the User Control
    
    Control uc = LoadControl("~/MyUserControl.ascx");
    
    // Add the User Control to the Controls collection
    
    Page.Controls.Add(uc);
    

    更多详情请点击此链接 - An Extensive Examination of User Controls http://msdn.microsoft.com/en-us/library/ms972975.aspx

    还要阅读 .net 中 ~ tidle 的用法 http://msdn.microsoft.com/en-us/library/system.web.virtualpathutility.aspx

    【讨论】:

      【解决方案3】:

      使用页面的 LoadControl 方法以编程方式执行此操作:

      http://msdn.microsoft.com/en-us/library/t9ecy7tf.aspx

      此外,如果您打算将其添加到 div,请确保通过在标记中添加 runat="server" 使该 div 成为服务器控件

      【讨论】:

      • ... 或使用ASP.NET Panel,这与使用runat=server 的div 基本相同。
      【解决方案4】:

      我有点不清楚你在问什么,如果这不能回答问题,请原谅我。

      假设可能的值是预先知道的,并且这个数字是适度的 - 就像你的例子中的三个 - 最简单的事情是在表单上包含“可见 = false”的所有控件,然后在你的 Load 方法在你想要的那个上设置为 true。

      如果可能性的数量非常多,或者如果它是动态的,以至于您在编码时甚至不知道可能性是什么,那么您可以放入一个包装对象,比如一个 div,然后添加项目到它的“控制”属性。但如果可能的话,我会避免这种情况,因为它很难维护:未来的程序员甚至不知道屏幕上可能有哪些控件。

      【讨论】:

      • 没有数据是动态的,将从数据库加载,所以我无法加载并且可见错误...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 2015-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多