从另一个控件访问用户控件
本文关键字:控件 用户 访问 另一个 | 更新日期: 2023-09-27 18:26:06
我有一个在 ASP.NET/C# 中实现的商店。 有一个页面 - ReservationProduct.aspx
- 它有一个显示产品的控件 - BuyTourProduct
- 另一个控件显示产品详细信息 - TourProductDetail
。
我知道保持两者解耦是一种很好的形式,但这是非常具体的商店用途。 我希望BuyTourProduct
能够在TourProductDetail
控件中将面板设置为可见或不使用 PanelName.Visible=true|false
。
如何在另一个控件的面板上设置一个控件属性? 我希望我说得足够清楚。
顺便说一下,这是我正在修改的几个第 3 个产品控件,因此更改它们是 2 个独立控件的事实对我们来说并不是一个真正的选择。
谢谢。
用户控件 BuyTourProduct 中编写一个事件(例如:需要更新产品详细信息(然后,可以在放置控件的页面中处理此事件。
在 TourProductDetail 控件中,可以编写公共属性来隐藏和显示面板。
因此,在上述事件处理程序中,BuyTourProduct 事件处理程序在页面中调用 TourProductDetail 控件的 ShowHidePanel 属性。
在用户控件的上下文中,用户控件不知道其他用户控件或其内容。 您需要在页面上下文中与控件进行交互,因为页面知道这两个控件。
您将需要两件事:
- 从 BuyTourProduct 控件触发的事件。
- 与 TourProductDetail 控件中的 PanelName 交互的方法。
如果事件已经存在,请使用该事件;否则,它将要求您修改BuyTourProduct的源代码,并公开一个事件并在该代码中触发该事件。 然后,还需要从控件内调用此事件。
public class BuyTourProduct : UserControl
{
// ...
public delegate void MyHideEventDelegate();
public event MyHideEventDelegate MyHideEvent;
// ...
public void SomeFunction()
{
if (MyHideEvent != null)
MyHideEvent();
}
// ...
}
接下来,您需要添加一个方法,以便在TourProductDetail中与PanelName进行交互:
public class TourProductDetail : UserControl
{
// ...
private Panel PanelName;
// ...
public void SetPanelNameVisible(Boolean visible)
{
PanelName.Visible = visible;
}
// ...
}
在主页上,您将订阅您想要的活动或MyHideEvent:
public partial class ReservationProduct : System.Web.UI.Page
{
// ...
protected void Page_Load(object sender, EventArgs e)
{
buyTourProduct.MyHideEvent += new BuyTourProduct.MyHideEventDelegate(buyTourProduct_MyHideEvent);
}
// ...
void buyTourProduct_MyHideEvent()
{
tourProductDetail.SetPanelNameVisible(false);
}
// ...
}