我正在使用两个自定义控件。一个收集搜索条件,另一个显示一个列表。这两个控件需要暂时保持独立。如何在ASP.net自定义控件之间进行通信
将数据从搜索控件转移到列表控件的最佳方法是什么?
我在想ViewState,会议或包装在一个UpdatePanel和使用自定义事件?
我正在使用两个自定义控件。一个收集搜索条件,另一个显示一个列表。这两个控件需要暂时保持独立。如何在ASP.net自定义控件之间进行通信
将数据从搜索控件转移到列表控件的最佳方法是什么?
我在想ViewState,会议或包装在一个UpdatePanel和使用自定义事件?
也许你可以创建一个委托和一个事件来传递一个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);
}
}
会使您拥有的数据,然后将数据绑定的公共方法的类型的公共属性列表
因此,搜索控件公开了一个Criteria类型的对象,并且列表控件绑定到该类型? – Kye 2010-04-29 08:25:21
如果你不介意公共访问搜索控件的一切,当然,为什么不 – TheGeekYouNeed 2010-04-29 14:09:26
这取决于执行的搜索中,哪些数据控件之间传递。在我看来,最好将标准传递给页面并让页面运行搜索将它们绑定到列表控件以显示结果。
如果控件是分开的,它们可能不应该直接通信。毕竟,大多数其他.NET控件都不能直接进行通信。我只能想到两个例外 - 孩子/家长控制有时传达基本信息;数据绑定控件有时直接与数据源通信。但是,这很大程度上。
如果你需要连接两个相邻的控件,那么“正常”的做法是让它们的容器处理它。就像,如果按钮单击会影响标签上的文本,则它是处理Click事件并设置Text属性的Page(它们两者的容器)。
另外,你也可以给你的ListControl一个名为FindControl的属性,并将它分配给Page_Init或其他东西。但是,如果耦合太紧,你可能想知道把这些控件合并是不是更好。
Deos通信发生在服务器还是客户端? – 2010-04-29 08:10:27
很高兴它发生在任何一个地方。一旦列表控件收到标准,它就会进行服务呼叫。 – Kye 2010-04-29 08:16:43