代码之家  ›  专栏  ›  技术社区  ›  Kye

如何在asp.net自定义控件之间进行通信

  •  1
  • Kye  · 技术社区  · 15 年前

    我正在使用两个自定义控件。一个收集搜索条件,另一个显示列表。这两个控件需要暂时保持分离。

    将数据从搜索控件传输到列表控件的最佳方法是什么?

    我在考虑viewstate、session或在updatepanel中包装两者并使用自定义事件??

    4 回复  |  直到 15 年前
        1
  •  1
  •   Kristof Claes    15 年前

    也许您可以创建一个委托和一个事件来传递一个searchvalues列表?这样,您就可以轻松地添加另一个或多个显示控件,以备将来需要时使用。

    请注意,这只是一些需要优化/改进的快速示例代码。

    public class SearchControl
    {
        public delegate void SearchEventHandler(object sender, Dictionary<string, string> SearchValues);
        public event SearchEventHandler OnSearch;
    
        public SearchControl()
        {
            btnSearch.Click += new EventHandler(Search);
        }
    
        protected void Search(object sender, EventArgs e)
        {
            if (OnSearch != null)
            {
                Dictionary<string, string> searchValues = new Dictionary<string, string>();
                searchValues.Add("name", "John");
                searchValues.Add("age", "24");
    
                OnSearch(this, searchValues);
            }
        }
    }
    
    public class DisplayControl
    {
        public void ShowResults(Dictionary<string, string> SearchValues)
        {
            // Some logic here...
        }
    }
    
    public class YourWebPage
    {
        SearchControl searcher = new SearchControl();
        DisplayControl displayer = new DisplayControl();
    
        public YourWebPage()
        {
            searcher.OnSearch += new SearchControl.SearchEventHandler(searcher_OnSearch);
        }
    
        public void searcher_OnSearch(object sender, Dictionary<string, string> SearchValues)
        {
            displayer.ShowResults(SearchValues);
        }
    }
    
        2
  •  1
  •   TheGeekYouNeed    15 年前

    公开您拥有的数据类型的公共属性,然后使用公共方法将数据绑定到列表

        3
  •  1
  •   Vilx-    15 年前

    如果控件是分开的,它们可能不应该直接通信。毕竟,大多数其他.NET控件也不直接通信。我只能想到两种例外情况:子控件/父控件有时会传递基本信息;数据绑定控件有时会直接与数据源通信。但基本上就是这样。

    如果需要连接两个相邻的控件,那么“正常”的方法是由它们的容器来处理它。类似地,如果按钮单击影响标签上的文本,则是处理单击事件并设置文本属性的页面(两者的容器)。

    或者,您也可以给listcontrol一个名为findcontrol的属性,并在page_in it或其他东西中分配它。但如果耦合如此紧密,您可能会想,合并控件是否也更好。

        4
  •  0
  •   Daniel Dyson    15 年前

    这取决于执行搜索的位置以及控件之间传输的数据。在我看来,最好将条件传递给页面,让页面运行搜索,将它们绑定到列表控件以显示结果。