【问题标题】:Access a user control from another control从另一个控件访问用户控件
【发布时间】:2012-02-29 17:17:33
【问题描述】:

我有一个用 ASP.NET/C# 实现的商店。有一个页面 - ReservationProduct.aspx - 有一个显示产品的控件 - BuyTourProduct - 和另一个显示产品详细信息的控件 - TourProductDetail

我知道将两者分离是一种很好的形式,但这是针对非常特定的商店用途。我希望BuyTourProduct 能够将TourProductDetail 控件中的面板设置为可见或不使用PanelName.Visible=true|false

如何在另一个控件的面​​板上设置一个控件的属性?我希望我说得足够清楚。

顺便说一句,这是我正在修改的第三个产品控件,因此改变它们是 2 个独立控件这一事实对我们来说并不是一个真正的选择。

谢谢。

【问题讨论】:

    标签: c# asp.net user-controls


    【解决方案1】:

    最好在用户控件 BuyTourProduct 中编写一个事件(例如:需要更新产品详细信息) 然后你可以在你放置控件的页面中处理这个事件。

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

    所以在上面的BuyTourProduct事件处理器中,页面中的事件处理器调用了TourProductDetail控件的ShowHidePanel属性。

    【讨论】:

    • +1 我仍然像线性程序流编码器而不是 OOP 一样思考。谢谢你的方法。
    【解决方案2】:

    在 UserControl 的上下文中,用户控件不知道其他 UserControl 或其内容。您需要与 Page 上下文中的控件进行交互,因为 Page 知道这两个控件。

    你需要两件事:

    • 从 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);
        }
    
        // ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      相关资源
      最近更新 更多