当 Control 变为 Enable=False 时 ASP.Net ViewState 不起作用

Posted

技术标签:

【中文标题】当 Control 变为 Enable=False 时 ASP.Net ViewState 不起作用【英文标题】:ASP.Net ViewState doesn't work when Control become Enable=False 【发布时间】:2010-05-26 15:44:58 【问题描述】:

为什么当控件确实包含值但设置为 .Enable=False 时,所有控件都变为禁用(没关系),但为什么 ViewState 不保留下一次回发的数据?如果我在不修改其启用状态的情况下获得 UserControl,则 ViewState 在回发之间工作。

我们如何禁用所有控件都变为禁用的 UserControl(这部分工作)但所有这些都保持使用 ViewState(这不起作用)?

澄清:

1)在aspx.cs点击按钮编辑:

myControl.Enabled = false;
//This produce to have all controls in myControl to be disabled.

2)在asp.cs中:点击保存离开EDIT状态:

myControl.Enabled = true;
//This produce that all controls inside myControl are blank : no viewstate!

其他回发有效,因为我们没有将 myControl.Enable 设置为 false。

【问题讨论】:

我不清楚你到底在问什么。回发后控件是否重新启用,或者它们是否保持禁用状态并丢失其状态?你能发布示例代码吗? 【参考方案1】:

指定.Enable=False 类似于服务器端禁用,而不是客户端禁用。这是出于安全目的,因此即使用户使用某些客户端技巧来“重新启用”它,您也可以真正禁用输入元素。如果要执行客户端禁用,则需要为此使用脚本,或者可能使用readonly 属性。

【讨论】:

【参考方案2】:

你试过 Page.Form.SubmitDisabledControls = true;

【讨论】:

【参考方案3】:

这是设计使然,如果您希望控件使用 ViewState 并且仍然被禁用,那么您必须在 ClientSide 上禁用该控件。我使用 Page.ClientScript 来处理此问题并注册您的 javascript 以禁用该控件。

【讨论】:

以上是关于当 Control 变为 Enable=False 时 ASP.Net ViewState 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

当 enable=true 时 TextInputLayout 轮廓颜色的颜色不同,然后是黑色,启用 false 时比浅灰色

c#,多个CheckBox,任意一个状态发生改变按钮Applay的状态变为可用,怎么做?

flow control

如何使用gio js将地球色从黑色变为白色

FormControl 上的 ValueChanges 在 Form.enable 时触发,即使使用 emitEvent: false

oracle 参数 enable_shared_pool_durations 设置为 true 或 false