【问题标题】:How to know whether a WebForms Control is rendered the first time?如何知道 WebForms 控件是否第一次呈现?
【发布时间】:2013-10-25 14:34:46
【问题描述】:

我有一个 WebForms 页面,上面有几个 .ascx UserControl 实例。这些控件位于选项卡式视图 (asp:MultiView) 的某些选项卡上。因此,这些控件中只有一个是可见的。

这些控件显示来自远程服务的当前数据。 我只想从远程服务获取数据一次,在每个控件第一次显示时(或者用户单击显式刷新按钮)。控件只使用EnableViewState = true 保存数据。

我现在有

protected override void OnPreRender(EventArgs e) {
    base.OnPreRender(e);
    Refresh(); //call the web service
    }
}

但这会在显示时调用网络服务,每次。

在页面上,我们有!Page.IsPostBack 技巧,但这当然不适用于控件,尤其是稍后才显示时。

但是如何只获取“第一次显示”的数据呢?

注意:我知道我可以自己将其存储在 ViewState 中,但没有办法使用现有的方法/数据吗?

【问题讨论】:

  • 不幸的是,这似乎只是页面IsPostBack 的副本,因为它在第一次显示控件后并没有改变(如果在初始页面加载时没有显示)
  • 如果您认为您的问题可以被视为缓存问题,也许这可以提供一些帮助msdn.microsoft.com/en-us/library/h30h475z%28v=vs.90%29.aspx
  • @jbl 非常有趣。我不知道那件事。但是显式刷新的可能性呢?看来这不可能了?
  • 跟随@Outputcache (msdn.microsoft.com/en-us/library/hdxfb6cy%28v=vs.90%29.aspx) 上的链接,您将看到一些VaryByParams/VaryByControls 属性。我猜它也可以用来强制刷新(比如使用虚拟查询字符串参数来强制刷新ajax调用)

标签: c# asp.net webforms controls postback


【解决方案1】:

尝试一个布尔值

bool isLoaded = false;

Page_Load()
{
   if(!isLoaded)
   {
      // Actual process here like data fill and etc. . . .
      isLoaded = true;
   }
}

【讨论】:

  • 虽然这行得通,但不幸的是,我觉得这有点像我在笔记中提到的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-19
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多