用户控件的调用方法一次,同一页面上有多个用户控件实例

时间:2018-12-20 18:01:11

标签: c# multiple-instances aspx-user-control

我有一个用户控件,带有一种从数据库中获取数据的方法。我正在使用带标签的主页,需要两次显示相同的信息。有没有某种方法可以在主页上设置2个用户控件,但是只调用一次该方法并填充2个不同的控件?该方法从数据库获取数据,对于同一件事两次调用它似乎是一种浪费。

public partial class control : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    public void bindcontrol(int id, string pie)
    {
        //get info from database and bind it to a gridview
    }
}

主页

<%@ Register TagPrefix="z" TagName="zz" Src="control.ascx" %>

 <div role="tabpanel" class="tab-pane" id="passport">
                    <z:zz ID="ctrl1" runat="server" />
 </div>
 <div role="tabpanel" class="tab-pane" id="passport">
                    <z:zz ID="ctrl2" runat="server" />
</div>

//code behind - which is what I'm trying to avoid:
 ctrl1.bindSummary(id, strPIE);
 ctrl2.bindSummary(id, strPIE);

1 个答案:

答案 0 :(得分:0)

您不能执行这样的封装方法。您可以对委托人执行类似的操作。如果要在特定类型的所有控件上执行方法,另一种选择是迭代选项卡页的控件,类似于:

  foreach(WebControl c in MyTabPage.Controls)
  {
     if(c is MyControlType)
     {
       ((MyControlType)c).PerformTask();//Cast to your type to call method on type
     }   
  }

或更紧凑的使用linq。

foreach(WebControl control in Parent.Controls.OfType<MyControlType>)
    ((MyControlType)c).PerformTask();

或为每个代表使用

Parent.Controls.OfType<MyControlType>.ForEach(p => PerformTask());