2012-02-29 71 views
0

我有一个在ASP.NET/C#中实现的商店。有一个页面 - ReservationProduct.aspx - 它有一个控件来显示产品 - BuyTourProduct - 另一个控件显示产品详细信息 - TourProductDetail从另一个控件访问用户控件

我知道这是保持两个分离的良好形式,但这是一个非常具体的商店使用。我希望BuyTourProduct能够将TourProductDetail控件中的面板设置为可见或不使用PanelName.Visible=true|false

如何在另一个控件的面​​板上有一个控件集属性?我希望我说得很清楚。

顺便说一句,这是我修改的第三个产品控件的几个,所以改变他们是2个单独控件的事实对我们来说不是一个真正的选择。

谢谢。

回答

1

在用户控件的上下文中,用户控件不知道其他用户控件或其内容。您需要与页面上下文中的控件进行交互,因为该页面可以识别这两个控件。

你需要两样东西:

  • 从BuyTourProduct控制触发的事件。
  • 与TourProductDetail控件中的PanelName交互的方法。

如果一个事件已经存在,请使用它;否则,它将要求您修改BuyTourProduct的来源,并在该代码中公开事件并触发该事件。然后,您还想从控件中调用此事件。

public class BuyTourProduct : UserControl 
{ 
    // ... 

    public delegate void MyHideEventDelegate(); 
    public event MyHideEventDelegate MyHideEvent; 

    // ... 

    public void SomeFunction() 
    { 
     if (MyHideEvent != null) 
      MyHideEvent(); 
    } 

    // ... 
} 

接下来,你需要添加一个方法与PanelName互动里面TourProductDetail:

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); 
    } 

    // ... 
} 
+0

感谢您的示例代码。它有很大帮助! – Deverill 2012-02-29 17:51:23

2

在用户控件中写入事件总是比较好的。BuyTourProduct(例如:需要更新产品详细信息) 然后,您可以在放置控件的页面中处理此事件。

在TourProductDetail控件中,您可以编写一个公共属性来隐藏和显示面板。

因此,在页面中的BuyTourProduct事件处理程序的上述事件处理程序调用TourProductDetail控件的ShowHidePanel属性。

+0

+1我仍然在想像线性程序流程编码器而不是OOP。谢谢你的方法。 – Deverill 2012-02-29 17:52:38

相关问题