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

Ali*_*ile 5 asp.net user-controls

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

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


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

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

Kel*_*sey 3

我不会动态地这样做,因为收益不值得复杂性或感知的节省。另外,如果您设置了visible = false,请记住视图状态仍然对您的控件启用。如果您担心来回数据并处理较大的视图状态,请确保禁用所有控件或包含它们的父面板的视图状态。不过,在回发时维护其状态与动态执行相同的不便。

此外,对于下一个使用代码的人来说,非动态地执行它更容易维护。布局很明显,并且比试图找出什么代码什么时候把什么放在哪里更容易可视化。

除了排除视图状态和可能可以忽略不计的服务器端处理之外,动态创建控件实际上并没有给你带来太多好处。我认为您会发现很难测量明显的差异,即使在非视图状态控件之间的负载和根据需要动态添加它们的开销下也是如此。

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