防止呈现用户控件

时间:2013-03-08 13:47:59

标签: asp.net user-controls render loadcontrol

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

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

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

练习的目标是性能优化。

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

这可以安全地保留原样,在将控件添加到页面并触发操作之前,方法代码不会运行。

虽然可见性检查感觉不是特别优雅,但它可能是处理动态加载控件上的自动有线事件的最佳方法。