C# 如何在多个用户控件之间共享数据?

C# 如何在多个用户控件之间共享数据?,c#,asp.net,C#,Asp.net,我有3个用户控件,每个控件都需要根据各种URL参数等从XML提要中提取数据。现在,所有3个用户控件的XML提要中的数据都是相同的,因为它们都发送相同的请求 对相同的数据分别提出3个请求似乎很愚蠢 我的想法是有一个我将调用的单例,它将向XML服务发出一个请求,然后向用户控件显示经过良好解析的结果 i、 e: 用户控件A获取单例 用户控件A要求单身者发出请求 Singleton发出请求并将XML解析为各种属性 用户控件C抓取单例并取出其数据 用户控件A从单例中提取其数据 用户控件B抓取单例并取出其数

我有3个用户控件,每个控件都需要根据各种URL参数等从XML提要中提取数据。现在,所有3个用户控件的XML提要中的数据都是相同的,因为它们都发送相同的请求

对相同的数据分别提出3个请求似乎很愚蠢

我的想法是有一个我将调用的单例,它将向XML服务发出一个请求,然后向用户控件显示经过良好解析的结果

i、 e:

  • 用户控件A获取单例
  • 用户控件A要求单身者发出请求
  • Singleton发出请求并将XML解析为各种属性
  • 用户控件C抓取单例并取出其数据
  • 用户控件A从单例中提取其数据
  • 用户控件B抓取单例并取出其数据
  • 现在我想了想,我需要在“makea request”方法中添加一些阻塞,这样我就不会同时调用它多次了——我对C#还相当陌生,最简单的方法是什么?用户控件是否同时运行?这方面有什么好的概述吗


    问题是“是否会在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,这样做简单多了,并且避免了单例,直到我可以在用户控件的层次结构中传递数据为止。:)