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

标签 c# asp.net

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

为相同的数据发出 3 个单独的请求似乎很愚蠢。

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

即:

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

既然我想到了,我需要向“发出请求”方法添加某种阻塞,这样我就不会同时多次调用它——我是 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 请求代码返回的类型的公共(public)属性(在本例中是一个字符串)。

供引用:

The Page object calls the OnLoad method on the Page object, and then recursively does the same for each child control until the page and all controls are loaded. The Load event of individual controls occurs after the Load event of the page.

发件人:ASP.NET Page Life Cycle Overview (这应该是一个很好的概述)。

关于c# - 如何在多个用户控件之间共享数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5893095/

上一篇:c# - X文档文件名

下一篇:c# - WCF认证

相关文章:

asp.net - ASP 文件上传静默失败

asp.net - 使用适用于 .NET 的 Azure Application Insights Auto Instrumentations 几乎是不可能的吗?

html - Response.write不显示图像

c# - 如何减少二进制/lambda 表达式?

c# - 是否应该路由 MVVM 事件?

c# - 在一个消息框中列出所有组合框项目

asp.net - session 过期事件?

c# - 将项目动态添加到 WPF 组合框,然后在某些事件上重置值

c# - 为什么我不能从扩展方法调用 PropertyChanged 事件?

asp.net - 在asp.net中显示按月和年分组的记录