C# 如何在多个用户控件之间共享数据?
我有3个用户控件,每个控件都需要根据各种URL参数等从XML提要中提取数据。现在,所有3个用户控件的XML提要中的数据都是相同的,因为它们都发送相同的请求 对相同的数据分别提出3个请求似乎很愚蠢 我的想法是有一个我将调用的单例,它将向XML服务发出一个请求,然后向用户控件显示经过良好解析的结果 i、 e:C# 如何在多个用户控件之间共享数据?,c#,asp.net,C#,Asp.net,我有3个用户控件,每个控件都需要根据各种URL参数等从XML提要中提取数据。现在,所有3个用户控件的XML提要中的数据都是相同的,因为它们都发送相同的请求 对相同的数据分别提出3个请求似乎很愚蠢 我的想法是有一个我将调用的单例,它将向XML服务发出一个请求,然后向用户控件显示经过良好解析的结果 i、 e: 用户控件A获取单例 用户控件A要求单身者发出请求 Singleton发出请求并将XML解析为各种属性 用户控件C抓取单例并取出其数据 用户控件A从单例中提取其数据 用户控件B抓取单例并取出其数
问题是“是否会在C#中的页面请求之间重新实例化一个单身汉?”但我想更一般的问题是“我在做一件愚蠢的事情吗”、“做这件事的最好方法是什么?”或者“有没有更简单的方法来做我想做的事情?”一般来说,如果我的直觉是单身汉,我认为我做错了(正如你同样直觉所示) 如果希望每个页面请求一个XML请求,并且在控件之间共享数据,我会这样做:
public class Page : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string data = DoXMLRequest();
ucControl1.Data = data;
ucControl2.Data = data;
ucControl3.Data = data;
}
}
确保每个控件都具有XML请求代码返回的类型的公共属性(在本例中为字符串)
供参考:
页面对象调用OnLoad
方法,然后
递归地对每个对象执行相同的操作
子控件,直到页面和所有
控件已加载。的加载事件
单个控件发生在
加载页面的事件
发件人:(这应该是一个很好的概述)
在C#中,是否会在页面请求之间重新实例化单例
不可以。只要类在内存中,静态值就会在页面请求、会话和用户之间保持不变。这类似于将某些内容放入应用程序缓存中。更好的解决方案是首先是会话(每个用户),然后是HttpCache(主要是因为值会过期),最后是(如果您绝对必须的话)一个真正的单例。如果每个页面都要重新创建此数据,那么按照MattMitchell的建议在页面加载中构建它。使用HttpContext.Items怎么样
请参见这对于站点的不同访问者来说是如何工作的?每个人都有相同的XML吗?不;XML请求根据用户访问的页面而有所不同-因此我希望每个单独的请求都会实例化一次singleton,否则每个人都会在他们确实不应该看到的时候看到相同的数据。问题是Singleeton不会为每个用户实例化。因此,术语singleton(如中所示)只有一个实例。singleton不会在您的quest=P中帮助您,除非…您做了一些古怪的事情,在这一点上它可能不是“可判定的”不再是单例。感谢Graphain,这样做简单多了,并且避免了单例,直到我可以在用户控件的层次结构中传递数据为止。:)