1

在我们的 asp.net webforms 应用程序中,我们将用户控件动态加载到占位符中。为了在回发中保留更改,我们的页面生命周期比平时要复杂一些。为了成功加载我们的视图状态,我们总是在 pageInit 中恢复之前的控制结构。只有这样我们才能清除占位符并将新控件加载到其中。

不幸的是,这意味着旧用户控件和新用户控件的整个生命周期,包括旧模块的整个 .ascx 标记文件的服务器端处理。

现在我的问题是:是否有可能最小化旧模块的服务器端处理,因为它永远不会被发送回客户端(即它的服务器端渲染是完全没有必要的)。我理想地想要实现的是用户控件的一种“轻量级”加载,当它的唯一目的是恢复 vewstate 信息而不会到达客户端时。

练习的目标是性能优化。

任何提示,想法或建议表示赞赏!

4

1 回答 1

2

通过简单地检查控件是否可见(http://msdn.microsoft.com/en-us/library/system.web.ui.control.visible.aspx) ,我已经解决了在动态添加控件的 webcontrol 生命周期事件中运行的代码-

protected void Page_Load(object sender, EventArgs e)
{
    if (this.Visible) 
    {
       //Your code here
    }
}

如果您有任何方法不是由页面生命周期事件触发,而是必须由用户操作触发,例如 -

protected void Button1_Click(object sender, EventArgs e)
{
   //Do something
}

这可以安全地保持原样,直到将控件添加到页面并触发操作后,方法代码才会运行。

尽管可见性检查感觉不是特别优雅,但它可能是处理动态加载控件上的自动连接事件的最佳方式。

于 2013-03-09T23:08:09.750 回答