Вызовите метод управления пользователем один раз с несколькими экземплярами управления пользователем на одной странице
У меня есть пользовательский элемент управления с методом для получения данных из базы данных. Я использую главную страницу с вкладками и мне нужно показать ту же информацию дважды. Есть ли способ иметь 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 ответ
Вы не можете выполнить такой инкапсулированный метод. Вы можете сделать что-то подобное с делегатами. Если вы хотите выполнить метод на всех элементах управления определенного типа, другой вариант будет повторять элементы управления на вкладке, аналогично:
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());