ASP .NET:动态加载控件与Visible = true

时间:2009-08-20 04:58:22

标签: asp.net user-controls

推荐哪一个?让我解释一下我想要实现的目标! 我有一个页面被很多用户使用,每个用户都有不同的角色,如admin,operator,普通用户 当客户打开该页面时,我想显示一组控件(按钮),这取决于他们的角色 admin允许执行x和y,但不允许普通用户执行这些操作。

为了实现我想做的事,哪种方法最好? 我应该在HTML中定义所有控件然后切换Visible属性,还是动态加载所需的控件?


对于Visible = false,我担心服务器处理时间。即使没有将HTML标记发送到客户端以获得Visible = false控件,我知道该控件仍然由ASP .NET加载,甚至可能已处理,但他的HTML结果不会写入输出流。

对于动态加载控件,一个不方便的是它们需要在Postback上重新初始化,事件和回发也存在一些问题。

4 个答案:

答案 0 :(得分:3)

我不会动态地这样做,因为增益不值得复杂或感知节省。此外,如果您设置visible = false,请注意仍然为您的控件启用了视图状态。如果您担心来回数据和处理较大的视图状态,请确保禁用所有控件或包含它们的父面板的视图状态。尽管如此,在回发时保持状态也会有同样的不便。

此外,非动态地执行此操作对于使用代码的下一个人来说更容易维护。布局是明显的,更容易可视化,而不是试图弄清楚什么时候放什么代码。

动态创建控件实际上并没有太多帮助,除了排除viewstate和可能可忽略的处理服务器端。我认为即使在非视图状态控件和动态必须根据需要添加它们的开销之间加载,也会发现很难测量很多显着差异。

最后,不动态更容易,所以为什么不先采取最简单的路线,看看是否有问题。如果它确实成为一个问题,那么在必要时进行改进。

答案 1 :(得分:1)

.Visible = false对此非常合理。在通过分析证明它是必需的之前,不要关心这种方法的速度。

答案 2 :(得分:1)

如果您将不同角色的控件放在不同的面板中,并且只是可见/不可见的整个面板

,该怎么办?

答案 3 :(得分:1)

动态控件的另一个不便之处是你需要编写大量脆弱的代码来处理它们,以及调试它们的麻烦。除非你有非常复杂的控件,耗费时间,或者你实际上已经发现了性能问题,否则我强烈推荐使用隐形方法(并且经常这样做)。这是KISS的原则(更不用说“不要预先优化”原则)。