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

Geo*_*rge 3 c# asp.net

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

对于相同的数据做出3个单独的请求似乎很愚蠢.

我的想法是有一个我将调用的单例,它将向XML服务发出一个请求,然后将精确解析的结果呈现给用户控件.

即:

  1. 用户控制A抓取单身人士.
  2. 用户控制A要求单身人士发出请求......
  3. Singleton发出请求并将XML解析为各种属性.
  4. 用户控件C抓取单例并将其数据拉出.
  5. 用户控件A将其数据从单例中拉出.
  6. 用户控件B抓取单例并将其数据拉出.

现在我考虑一下,我需要为"make a request"方法添加一些阻塞,这样我就不会多次同时调用它 - 我对C#很新,最简单的方法是什么做这个?用户控件是否同时运行?这个地方有一个很好的概述吗?

问题是"在C#中的页面请求之间是否会重新实现单例?",但我想一个更普遍的问题是"我做的很傻","最好的方法是什么?" 或"有更简单的方法来做我想要的吗?".

Mat*_*ell 6

作为一般规则,如果我的直觉是单身人士,我认为我做错了(因为你同样直觉).

如果你想要每个页面请求一个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;
    }
}
Run Code Online (Sandbox Code Playgroud)

确保每个控件都具有XML请求代码返回的类型的公共属性(在此示例中为字符串).

以供参考:

Page对象调用Page对象上的OnLoad方法,然后递归地为每个子控件执行相同操作,直到加载页面和所有控件.单个控件的Load事件发生在页面的Load事件之后.

来自:ASP.NET页面生命周期概述(应该作为一个很好的概述).