我在ASP.NET / C#中实现了一个商店。有一个页面 - ReservationProduct.aspx
- 其中包含显示产品的控件 - BuyTourProduct
- 以及另一个显示产品详细信息的控件 - TourProductDetail
。
我知道保持两者分离是一种很好的形式,但这是一个非常具体的商店用途。我希望BuyTourProduct
能够使用TourProductDetail
将PanelName.Visible=true|false
控件中的面板设置为可见或不可见。
如何在另一个控件的面板上设置一个控件集属性?我希望我说的够清楚。
顺便说一句,这是我正在修改的几个第三个产品控件,因此改变它们是2个独立控件的事实对我们来说不是一个真正的选择。
感谢。
答案 0 :(得分:2)
在用户控件BuyTourProduct中编写事件总是更好(例如:需要更新产品详细信息) 然后,您可以在放置控件的页面中处理此事件。
在TourProductDetail控件中,你可以编写一个公共属性来隐藏和显示面板。因此,在页面中的BuyTourProduct事件处理程序的上述事件处理程序中,调用TourProductDetail控件的ShowHidePanel属性。
答案 1 :(得分:1)
在UserControl的上下文中,用户控件不知道其他UserControl或其内容。您需要与Page上下文中的控件进行交互,因为Page可以识别这两个控件。
你需要两件事:
如果已经存在某个事件,请使用该事件;否则,它将要求您修改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;
}
// ...
}
从Page,您将订阅您想要的活动或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);
}
// ...
}