【问题标题】:Passing a parameter to a programmatically created User Control将参数传递给以编程方式创建的用户控件
【发布时间】:2012-08-01 04:08:06
【问题描述】:

让我先说一句:我为此在谷歌上搜索了很多,找到了很多示例和解决方案,但我仍然无法弄清楚。

在 .aspx.cs 代码隐藏文件中,我有以下内容:

NewsArticleList listall = NewsArticleManager.GetListAll();
foreach (NewsArticle x in listall)
{
    Control c1 = (NewsArticleContainer)LoadControl("~/UserControls/NewsArticleContainer.ascx");
    ((NewsArticleContainer)c1).PopulateWithNewsArticle(x);
    mynewspanel.Controls.Add(c1);
}

我在用户控件中有一个名为 PopulateWithNewsArticle() 的方法,它接受 NewsArticle,并相应地填充用户控件的 Web 控件:

public void PopulateWithNewsArticles(NewsArticle x)
{
   lbltitle.Text = x.Title;
   lblcategory.Text = x.Category;
   //...etc.
}

现在可以了,这很好。但是我想学习/理解的是,当我 LoadControl() 时如何将 NewsArticle x 传递给用户控件,以便在创建用户控件时,我可以在用户控件的 Page_Load 上解包 NewsArticle,并设置实例化用户控件时从右侧开始的 Web 控件属性,而不是在使用 PopulateWithNewsArticle 方法实例化之后执行它(就像我现在拥有的那样)。

【问题讨论】:

    标签: c# asp.net user-controls controls


    【解决方案1】:

    您可以在NewsArticleContainer.ascx 中公开公共属性NewsArticle,因此您将拥有如下初始化代码:

    var control = (NewsArticleContainer)LoadControl("~/UserControls/NewsArticleContainer.ascx");
    control.NewsArticle = x;
    

    【讨论】:

      【解决方案2】:

      你可以使用

      Control c1 = 
      (NewsArticleContainer)LoadControl(typeof(NewsArticleContainer),new object[]{ x });
      

      这是Page.LoadControl()的重载,它有这样的语法

      public Control LoadControl(
          Type t,
          Object[] parameters
      )
      

      之后,您还必须为您的 UserControl 创建一个有效的构造函数,可能是这样的

      class NewsArticleContainer:System.Web.UI.UserControl
      {
         public NewsArticleContainer(NewsArticle x)
         {
            // Some cool code stuff here
         }
      } 
      

      有关此go here 的更多信息。

      【讨论】:

      • +1 我没有意识到 LoadControl 可以采用重载的构造函数
      • 太棒了,非常感谢。我的下一个问题是,在通过重载的 LoadControl() 传递我的参数后,如何在用户控件的构造函数中在另一端接收和解包这些参数?它只是“知道”为构造函数使用这些参数吗?
      • 实际上看起来重载需要不同的参数。如果你想使用对象数组,你不能给它一个字符串作为路径,但你需要给它一个Type。
      • 是的,你是对的,谢谢你通知我。我已经编辑了我的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 2017-12-28
      • 1970-01-01
      • 2010-12-15
      • 2011-02-12
      • 1970-01-01
      相关资源
      最近更新 更多