当 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的状态变为可用,怎么做?
FormControl 上的 ValueChanges 在 Form.enable 时触发,即使使用 emitEvent: false